正则表达式查找数字,但不是十进制数字的一部分

时间:2019-06-28 01:01:47

标签: regex

我有以下正则表达式

\b(?:\d[ -]*?){5,10}\b

可行,但它也返回作为小数部分的数字。正确的响应如下所示,但目前返回的是所有。它看到“。”作为单词边界。

12.123456 = no match

Hello John 124567 = match

12345667 = match

2 个答案:

答案 0 :(得分:2)

您需要在正则表达式中使用否定的后向断言:

>>> print(repr(E.a))
<E.a>

>>> print(E.a)
a

>>> print('the answer is: %s!' % E.a)
the answer is: a!

RegEx Demo

\b(?<!\.)(?:\d[ -]*){5,10}\b 是否定式后置断言,如果(?<!\.)紧接在第一位数之前,则匹配失败。

答案 1 :(得分:1)

使用空白语句跳过小数点并使其失败,这会导致与您的
匹配 正则表达式。您无需将正则表达式分开即可进行任何更改。

(?:\d+(?:\.\d*)|\.\d+)(*SKIP)(*FAIL)|\b(?:\d[ -]*?){5,10}\b

Square

扩展

    (?:
         \d+ 
         (?: \. \d* )
      |  \. \d+ 
    )
    (*SKIP) (*FAIL) 
 |  
    \b 
    (?: \d [ -]*? ){5,10}
    \b