我正在使用正则表达式从收据中获取每个行项目的数据。收据将如下所示:
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+\*#)?)
它不起作用,我认为这是因为将最后一个括号设为可选允许贪婪(.*)
者绝对捕捉到所有东西。如果最后一个括号不是可选的,则正则表达式将对带有 extra 的行项目执行其工作*#
,但它不会匹配第一个和第三个括号(因为它们没有 extra *#
)。
有任何想法吗?