python2 re正则匹配关于中文的坑
2017-09-30 本文已影响971人
doverxu
import re
1.如果pattern是'匹配':
m = re.match('匹配', '匹配')
print(m.group()) # 匹配
print(repr(m.group())) # 打印\xe5\x8c\xb9\xe9\x85\x8d
这样看上去没有什么问题。
2.但是如果pattern是'[匹配]':
m = re.match('[匹配]', '匹配')
print(m.group()) # 打印乱码,这是为什么呢?不是应该匹配‘匹’字吗?
print(repr(m.group())) # 打印\xe5
解释:'[匹配]'被解释为'[\xe5\x8c\xb9\xe9\x85\x8d]', '匹配'被解释为'\xe5\x8c\xb9\xe9\x85\x8d',
这是字符串,本质上可以叫做‘字节串’,每个汉字被分成了3个字节,熟悉正则规则的话可以就很容易看出来了,匹配‘\xe5’
是正确的。
解决办法:是在字符串前添加u,这样就把字节串转化成了汉字的unicode码:"u'\u5339\u914d'",
这样每个汉字就不会被拆分了(^-^)。