我正在使用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}
,但它没有用。我怎么能在句子中匹配这些表情符号?
答案 0 :(得分:4)
'\ue317'
不是u"asdasd \ue317 asad"
的子字符串 - 它是人类可读的unicode字符表示,并且无法与regexp匹配。正则表达式适用于repr(u'\ue317')
答案 1 :(得分:2)
尝试
string1_gbk = string1.decode('utf-8').encode('gb2312', 'replace')
应输出?而不是那些表情符号。
答案 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()
。