获取文本正则表达式

时间:2015-04-22 20:55:27

标签: regex

我需要从PO中找到一个项目的信息。我有商品编号描述数量单价纳税百分比 ,以及总价。我应该找到3个匹配项,但是第3项有一个很大的描述信息,并将文本分成几行:

1 99999 Item description item description <DESC> 2 100.10 10% 200.20
2 99999 Item description item description <DESC> 3 100.10 10% 300.30
3 99999 Item description item description
Item description item description
Item description item description
 <DESC> 1 100.10 10% 100.10

我创建了标记<DESC>以尝试用作描述的终点,因为说明中有数字和特殊字符,我需要使用.*来获取它。

我创建了这个正则表达式以匹配该行,但它不起作用,因为第3项。我在这里使用{1,4}来获得大的描述:

\d{1,3}\s*\d{5}\s*\s*(.+\s*\n*){1,4}<DESC>\s*\d{1,3}\s*([0-9]+(\,[0-9]{3})*\.[0-9]{2})\s*([0-9]+(\,[0-9]{1,2})?)\%\s*([0-9]+(\,[0-9]{3})*\.[0-9]{2})

...但它只生成2个匹配。

1 99999 Item description item description <DESC> 2 100.10 10% 200.20
2 99999 Item description item description <DESC> 3 100.10 10% 300.30

3 99999 Item description item description
Item description item description
Item description item description
 <DESC> 1 100.10 10% 100.10

有没有办法更改(.+\s*\n*){1,4}<DESC>以获取第一个<DESC>并在第1项和第2项之间找到2个匹配项?

1 个答案:

答案 0 :(得分:0)

默认情况下,regexp量词是贪婪的,因此它们将匹配允许其余正则表达式匹配的最长字符串。而不是{1,4},使用+?来获得描述的非贪婪匹配。