如何将句子中的表情符号与正则表达式匹配

时间:2012-06-05 00:49:49

标签: python regex emoticons

我正在使用Python来处理微博(一种类似Twitter的中国服务)句子。 句子中有一些表情符号,其对应的unicode为\ue317等。 要处理句子,我需要用gbk编码句子,见下文:

 string1_gbk = string1.decode('utf-8').encode('gb2312')

会有UnicodeEncodeError:'gbk' codec can't encode character u'\ue317'

我尝试了\\ue[0-9a-zA-Z]{3},但它没有用。我怎么能在句子中匹配这些表情符号?

3 个答案:

答案 0 :(得分:4)

'\ue317'不是u"asdasd \ue317 asad"的子字符串 - 它是人类可读的unicode字符表示,并且无法与regexp匹配。正则表达式适用于repr(u'\ue317')

答案 1 :(得分:2)

尝试

string1_gbk = string1.decode('utf-8').encode('gb2312', 'replace')

应输出?而不是那些表情符号。

Python Docs - Python Wiki

答案 2 :(得分:1)

可能是因为反斜杠是regexp语法中的特殊转义字符。以下对我有用:

>>> test_str = 'blah blah blah \ue317 blah blah \ueaa2 blah ue317'
>>> re.findall(r'\\ue[0-9A-Za-z]{3}', test_str)
['\\ue317', '\\ueaa2']

请注意,它没有错误地匹配最后的ue317,它没有前面的反斜杠。显然,如果你想替换那些字符串,请使用re.sub()