匹配数字,不能跟在单词或标点后面

时间:2019-04-21 15:43:28

标签: regex regex-lookarounds

我想使用正则表达式匹配不带空格或标点符号的数字,例如:

  • foo12->匹配12
  • foo 42->没有匹配项
  • foo.42->没有匹配项

我想到了: (?<![[:space:][:punct:]])\d+

但是,这不符合我的预期,对于示例,结果如下所示:

  • foo12->匹配12(确定)
  • foo 42->匹配2(不好)
  • foo.42->匹配2(不好)

我了解,为什么在最后两个示例中它匹配一位数字(因为negative-lookbehind仅包括空格和标点符号),但是我不确定如何更改正则表达式以排除那些匹配项。如何纠正?

2 个答案:

答案 0 :(得分:2)

部分匹配的原因是引擎不知道从您的需求出发应该从哪里开始。您通过在字符类中包含\d来告诉引擎:

(?<![[:space:][:punct:]\d])\d+
                       ^^

答案 1 :(得分:0)

This RegEx可以帮助您将字符串输入分为两组,其中第二组($2)是目标数字,而第一组($1)是非数字在它后面:

([A-Za-z_+-]+)([0-9]+)

RegEx

如果您想将其用于文本处理,这样做可能是安全的。

相关问题