这是我尝试使用re模块在python中创建的模式对象。我想要的是将字符串“(\ exists x)(Px * Qx)”并找到“Px * Qx”部分。我以为我会尝试使用前瞻和后瞻断言。我不确定我是否使用了这个错误或者是否有错误(字符。
p = re.compile(r'?<=[(]\w+?=[)]')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/re.py", line 190, in compile
return _compile(pattern, flags)
File "/usr/lib/python2.7/re.py", line 244, in _compile
raise error, v # invalid expression
sre_constants.error: nothing to repeat
答案 0 :(得分:2)
您需要将令牌放入一个组以应用lookbehind(添加括号):(?<=[(]\w+(?=[)]))
Python 在lookbehind中不支持变量重复。所以,你不能在那里写\w+
。
只有背后隐藏的正则表达式不匹配! Lookbehind意味着“尝试匹配这个东西,然后保持在相同的起始位置以匹配正则表达式的后续部分。”但是,在您的情况下,没有以下部分。所以,没有什么比赛。
如果您想获取最后一个括号内的文字:
^.*\((.*?)\)$
如果您想跳过第一个括号并获取剩余部分删除括号:
^\(.*?\)\((.*)\)$
请更具体地定义您想要的内容,以便我可以帮助您编写正确的正则表达式。