【问题标题】:Get the first match word in a text regex获取文本正则表达式中的第一个匹配词
【发布时间】:2015-04-22 20:55:27
【问题描述】:

我需要从采购订单中查找商品信息。我有商品编号描述数量单价税率 ,以及总价。我应该找到 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

我创建了标签&lt;DESC&gt;来尝试作为描述的终点,因为描述中有数字和特殊字符,我需要使用.*来获取它。

我创建了这个正则表达式来匹配该行,但由于第 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}&lt;DESC&gt; 以获取第一个 &lt;DESC&gt; 并在项目 1 和 2 之间找到 2 个匹配项?

【问题讨论】:

  • 你似乎可以修改内容,所以你应该更好地格式化它,而不是使用正则表达式
  • 没有一个真实的例子,我不可能提供帮助。

标签: regex


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多