Python 正则表达式:查找单词和表情符号

Python regex: find words and emoticons

我想在推文和包含单词、短语和表情符号的字符串列表之间找到匹配项。这是我的代码:

words = [':)','and i','sleeping','... :)','! <3','facebook'] regex = re.compile(r'\b%s\b|(:\(|:\))+' % '\b|\b'.join(words), flags=re.IGNORECASE)

我一直收到这个错误:

error: unbalanced parenthesis

显然代码有问题,无法匹配表情符号。知道如何解决吗?

我尝试了下面的方法,它不再抛出错误:

words = [':\)','and i','sleeping','... :\)','! <3','facebook']

虽然 words 具有所有必要的格式,但重新使用 () 作为特殊字符。这要求您使用 \(\) 来避免将它们解释为特殊字符,而是将其解释为 ASCII 字符 40 和 41。由于您不明白@Nicarus 在说什么,因此您需要使用这个:

words = [':\)','and i','sleeping','... :\)','! <3','facebook']

注意:我只是拼写出来,因为对于所有可能想要批评它的人来说,这看起来不像是学校作业。另外,在进入堆栈溢出之前查看文档。 This 解释一切。

re 模块有一个函数 escape 负责正确转义单词,所以你可以只使用

words = map(re.escape, [':)','and i','sleeping','... :)','! <3','facebook'])

请注意,当与不以实际单词字符开头或结尾的单词一起使用时,单词边界可能无法正常工作。