正则表达式 - 找到最大可能的匹配,这可能是在没有前面的单词检查的情况下找到的,或者什

时间:2016-08-08 10:23:49

标签: regex regex-lookarounds regex-greedy

我不知道确切的术语,因此很遗憾找不到我的具体案例的解决方案。

我知道如何找到一个单词,而不是使用负向前瞻的另一个预定义单词。 Example

我的目标是只匹配最大可能的短语,匹配而不添加前一个单词的检查。如果他们使用逗号,我不希望该组中的任何匹配。如果没有逗号,我希望所有这些都用一个短语。

我的基本想法是在匹配前面有逗号的情况下进行正常的正则表达式并再次检查。可以一次性完成吗?

示例(愚蠢的一个): 众议院 566 819 ,94841 681,很不错 4571 68484 81981

理想输出:

  • 566 819

  • 4571 68484 81981

我希望所有数字都匹配,不会直接跟随逗号(所需匹配为粗体),作为一个大匹配。

我目前对此案例的正则表达式如下:

\ B(!)\ S((\ d + \ S *)+)

然而它也找到了681,因为它是一个数字而前面没有逗号。 这对我来说是一种不受欢迎的行为。

我希望我能很好地解释我的问题。 有没有办法实现我的目标?

1 个答案:

答案 0 :(得分:0)

正则表达式

(?<=[^,\d]\s|^)(\d+(?:\d+\s*)+)

将匹配最长的数字和空格组合,其前面是^(行首)或除[,\d]\s之外的任何内容(逗号或数字后跟空格)。

这就是你要找的地方吗?我很难理解你的问题所以我基于:

  

我希望所有数字都匹配,而不是直接跟在逗号

之后