匹配不遵循单词或标点符号的数字

问题描述 投票:1回答:2

我希望有正则表达式匹配前面没有空格或标点符号的数字,例如:

  • foo12 - >匹配12
  • foo 42 - >不匹配
  • foo.42 - >不匹配

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

但是,这不符合我的意图,对于示例,结果如下:

  • foo12 - >匹配12(OK)
  • foo 42 - >匹配2(不行)
  • foo.42 - >匹配2(不行)

我明白,为什么它匹配最后两个例子中的单个数字(因为负面后观仅包括空格和标点符号),但我不知道如何更改我的正则表达式以排除这些匹配。怎么纠正?

regex regex-lookarounds
2个回答
2
投票

部分匹配的原因是引擎并不确切地知道它应该从您的要求开始。你通过在字符类中包含\d来告诉引擎:

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

0
投票

This RegEx可能会帮助您将字符串输入分成两组,其中第二组($2)是目标数字,第一组($1)是其后面的非数字:

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

RegEx

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

© www.soinside.com 2019 - 2024. All rights reserved.