我需要一个 Python 正则表达式来匹配整数,但不是来自字符串输入的 float 。
以下正则表达式使用否定前瞻和否定回顾来确保数字前面或后面都没有“.”。
(?<!\.)[0-9]+(?!\.)
它仅适用于单个数字的 float 。例如
int_regex = re.compile("(?<!\.)[0-9]+(?!\.)")
str_int_list = int_regex.findall(text)
Correct when no more than 1 digit on each side of a float:
"1 + 2 + 3.0 + .4 + 5. + 66 + 777" --> ['1', '2', '66', '777']
Incorrectly matches the '1' of '12.3' and the '5' of '.45':
"12.3 + .45 + 678" --> ['1', '5', '678']
问题似乎是正则表达式中间的 [0-9]+ 不够贪心。
我尝试将数字匹配添加到先行和后行,但在 Python 错误中遇到了“后行需要是恒定长度”的错误。
任何关于如何只匹配整数而不匹配 float 的建议都将不胜感激。
请您参考如下方法:
由于负向后视和先行不允许点,正则表达式引擎在确实遇到点时简单地回溯一位数,导致正则表达式仅匹配数字的一部分.
为防止这种情况,请在环视中添加数字:
(?<![\d.])[0-9]+(?![\d.])
或使用边界\b:
(?<!\.)\b[0-9]+\b(?!\.)
