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

2021-04-11 14:41:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我在运行以下代码时遇到了一些问题,这些代码是用来检查表情符号的。我老是遇到一个错误,无法解决这个问题。在

代码如下:

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')

我错了

^{pr2}$

显然,括号/括号的某个地方有个错误。然而,我用一个反斜杠逃脱了我能想到的一切,但仍然无法解决。你知道我哪里出错了吗?我觉得这个错误是在regex表达式本身,经过一点调试,但无法确定到底是什么。在

西蒙。在

归功于克里斯托弗·波茨(http://sentiment.christopherpotts.net/code-data/happyfuntokenizing.py),我从他那里找到了表情符号表达式。在

1条回答
网友
1楼 ·
regexes= [re.compile(p) for p in patterns]

…正在尝试将字符串中的每个字母编译为自己的正则表达式。因此,当p(时,它期望(并且找不到)一个结束的);同样地,[和{}。在


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

^{pr2}$

如果需要regex列表,patterns将被定义为一个列表:patterns=[ ... ],而不是{}。在

相关问题