这是我尝试使用 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
最佳答案
问题
您需要将 token 放入组中以应用后视(在周围添加括号):
(?<=[(]\w+(?=[)]))
Python 不支持 lookbehind 中的变量重复。所以,你不能写
\w+
那里。只有后视的正则表达式什么都不匹配!向后看意味着“尝试匹配这个东西,然后保持在相同的起始位置以匹配正则表达式的以下部分。”但是,在您的情况下,没有后续部分。所以,没有任何匹配项。
解决方案
如果你想获取最后一个括号内的文本:
^.*\((.*?)\)$
如果您想跳过第一个括号并获得删除括号的剩余部分:
^\(.*?\)\((.*)\)$
请更具体地定义您想要的内容,以便我可以帮助您编写正确的正则表达式。
关于python - 以括号开头和结尾的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12207991/