0

我正在尝试验证与此类似的表达式:

SEN 3 00000001 HT 12.60 39.50

使用模式SEN \\d{1} \\w{8} \\w{1,2} ([-+]?[0-9]*\\.?[0-9]*){1,2}。该模式大多有效。返回的组是

SEN 3 00000001 HT 12.60

39.50迷失者。我认为原因是因为{1,2}我的模式中的最后一个数量条件 () 只满足12.60.

有没有办法根据使用前瞻([-+]?[0-9]*\\.?[0-9]*)的字符数量来设置需要满足的数量?\\w{1,2}

4

1 回答 1

4

你几乎明白了:)

您所犯的错误是将空间留在最后重复的组之外。由于 12.60 和 39.50 之间有一个空格,因此除了 12.60 之外没有其他匹配项。

试试这个正则表达式:

SEN \\d{1} \\w{8} \\w{1,2}( [-+]?[0-9]*\\.?[0-9]*){1,2}

一些优化:

  • 将 () 替换为 (?:) 因为它会在量化时被覆盖,除非这是设计使然
  • 将 \d{1} 替换为 \d,它们是一样的。

演示+说明:http ://regex101.com/r/jQ7sP2

于 2013-01-02T19:27:27.370 回答