【发布时间】:2012-12-11 23:28:27
【问题描述】:
我正在使用正则表达式从收据中获取每个行项目的数据。 收据将如下所示:
Qty Desc
1 JD *#
MARTINI *#
2 XXXXXX
3 YYYYYY
4 JD
PEPSI *#
所有项目都有数量和描述,其中一些有额外的*#。另外,请注意,描述中可以有空格,甚至不止一行,每一行都可以有自己的*#。我想抓住数量和描述(如果多于一行,则获取所有行),我根本不在乎额外的*#。所以在这个例子中,对于第一个行项目,我会捕获 Quantity=1 和 Description="JD MARTINI"。第四个,Quantity=4,Description="JD PEPSI"。
我当前的正则表达式如下所示:
((\d+)\s+(.*)(\s+\*#)?)
它不起作用,我认为这是因为将最后一个括号设为可选允许贪婪的(.*) 绝对捕获所有内容。如果最后一个括号不是可选的,则正则表达式将对带有额外 *# 的行项目执行其工作,但它不会匹配第一个和第三个括号(因为它们没有额外的 *# )。
有什么想法吗?
【问题讨论】:
-
你的描述都是纯文本,还是有空格?
-
@Ann L - 干得好,我只是想问这个:-)
-
您可能想在 regexlib.com 上尝试正则表达式测试工具,顺便说一句。我发现它很有帮助。
-
很抱歉忘记提及这一点。它们确实有空格。
标签: c# .net regex string split