正则表达式以括号开头和结尾

时间:2012-08-31 01:59:53

标签: python regex

这是我尝试使用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

1 个答案:

答案 0 :(得分:2)

问题

  1. 您需要将令牌放入一个组以应用lookbehind(添加括号):(?<=[(]\w+(?=[)]))

  2. Python 在lookbehind中不支持变量重复。所以,你不能在那里写\w+

  3. 只有背后隐藏的正则表达式不匹配! Lookbehind意味着“尝试匹配这个东西,然后保持在相同的起始位置以匹配正则表达式的后续部分。”但是,在您的情况下,没有以下部分。所以,没有什么比赛。

  4. 解决方案

    如果您想获取最后一个括号内的文字:

    ^.*\((.*?)\)$
    

    如果您想跳过第一个括号并获取剩余部分删除括号:

    ^\(.*?\)\((.*)\)$
    

    请更具体地定义您想要的内容,以便我可以帮助您编写正确的正则表达式。