正则表达式错误:“不平衡的括号”但无法找到错误

时间:2015-07-27 14:54:24

标签: python regex

我在运行以下用于检查表情符号的代码时遇到了一些问题。我一直收到错误,无法解决如何解决问题。

以下是代码:

import re

patterns = r"""
    (?:
      [<>]?
      [:;=8]                     # eyes
      [\-o\*\']?                 # optional nose
      [\)\]\(\[dDpP/\:\}\{@\|\\] # mouth      
      |
      [\)\]\(\[dDpP/\:\}\{@\|\\] # mouth
      [\-o\*\']?                 # optional nose
      [:;=8]                     # eyes
      [<>]?
    )
"""

regexes= [re.compile(p) for p in patterns]


text = 'hi there! my name is SimonSchus and here is an emoticon :-)'


for regex in regexes:
    print('Looking for ', regex," in ",(regex.pattern, text))

    if regex.search(text):
        print('found a match!')
    else:
        print('no match')

我得到的错误是

raise error("unbalanced parenthesis")
sre_constants.error: unbalanced parenthesis

显然,括号/括号中出现错误。但是,我已经用反斜杠逃脱了我能想到的一切,但仍然无法解决问题。我出错的任何想法?我觉得错误是在regex表达式本身的一些调试,但无法确定究竟是什么。

西蒙。

感谢Christopher Potts(http://sentiment.christopherpotts.net/code-data/happyfuntokenizing.py),我发现了表情符号。

1 个答案:

答案 0 :(得分:3)

regexes= [re.compile(p) for p in patterns]

...正在尝试将字符串中的每个字母编译为自己的正则表达式。因此,当p(时,它会预期(并且无法找到)结束);同样适用于[]

您的patterns只是一个字符串,而不是它们的列表。因此:

patterns_re = re.compile(patterns)

如果您想要一个正则表达式列表,patterns将被定义为列表:patterns=[ ... ],而不是patterns=r"..."