正则表达式:匹配表达式内的整数

时间:2015-10-05 12:17:06

标签: python regex

我有兴趣使用Python re模块在表达式中搜索整数。例如,给出字符串

1e2 - variabl3e+2 + atan2(8/3.0, -1.)
                ^         ^

我想提取28。作为一个起点,我有

(?<![a-zA-Z_.])(?<![eE][-+])(\d+)(?![eE.])

使用负前瞻和后观来排除形成浮点数或变量/函数的整数的整数。问题在于,由于2位而导致variabl3e+2中的e+2被排除,因此2似乎是浮点指数。

然而,如果没有可变宽度的负面观察,我无法想到处理这种情况的方法。

2 个答案:

答案 0 :(得分:0)

您可以匹配不在字母或点之前或之后的数字。

[^\w\.-](\d+)[^\w\.-]

这个正则表达式通过了简单的测试。 https://regex101.com/r/tV3zZ1/2

作为@jonrsharpe said,使用真正的解析器更安全。

答案 1 :(得分:0)

match = re.search(r'e[+-](\d).+\W\w+\((\d)',st)

if match is not None:
    print(match.groups())
else:
     print("no match")

('2', '8')