我有以下正则表达式
\b(?:\d[ -]*?){5,10}\b
可行,但它也返回作为小数部分的数字。正确的响应如下所示,但目前返回的是所有。它看到“。”作为单词边界。
12.123456 = no match
Hello John 124567 = match
12345667 = match
答案 0 :(得分:2)
您需要在正则表达式中使用否定的后向断言:
>>> print(repr(E.a))
<E.a>
>>> print(E.a)
a
>>> print('the answer is: %s!' % E.a)
the answer is: a!
\b(?<!\.)(?:\d[ -]*){5,10}\b
是否定式后置断言,如果(?<!\.)
紧接在第一位数之前,则匹配失败。
答案 1 :(得分:1)
使用空白语句跳过小数点并使其失败,这会导致与您的
匹配
正则表达式。您无需将正则表达式分开即可进行任何更改。
(?:\d+(?:\.\d*)|\.\d+)(*SKIP)(*FAIL)|\b(?:\d[ -]*?){5,10}\b
扩展
(?:
\d+
(?: \. \d* )
| \. \d+
)
(*SKIP) (*FAIL)
|
\b
(?: \d [ -]*? ){5,10}
\b