我在运行以下用于检查表情符号的代码时遇到了一些问题。我一直收到错误,无法解决如何解决问题。
以下是代码:
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),我发现了表情符号。
答案 0 :(得分:3)
regexes= [re.compile(p) for p in patterns]
...正在尝试将字符串中的每个字母编译为自己的正则表达式。因此,当p
为(
时,它会预期(并且无法找到)结束)
;同样适用于[
和]
。
您的patterns
只是一个字符串,而不是它们的列表。因此:
patterns_re = re.compile(patterns)
如果您想要一个正则表达式列表,patterns
将被定义为列表:patterns=[ ... ]
,而不是patterns=r"..."
。