在对文本进行处理的时候经常会遇见要对括号和标点进行匹配
常见的英文(半角)符号如( ) 直接用正则匹配即可
但是遇见全角字符(中文括号、标点),直接用正则匹配会存在问题:
因为编码通常为为utf8,若直接匹配,中文括号的3字节编码会和一些中文的字节编码重复,产生意想不到的结果
若用decode转为unicode编码,则可避免产生错误结果,但也无法直接用正则匹配到
经过试验,发现一个看上去最佳的解决方法:
将字符串decode之后调用一个将全角符号转为半角符号的方法,然后处理返回的字符串
def strQ2B(ustring):
"""全角转半角"""
rstring = ""
for uchar in ustring:
inside_code=ord(uchar)
if inside_code == 12288: #全角空格直接转换
inside_code = 32
elif (inside_code >= 65281 and inside_code <= 65374): #全角字符(除空格)根据关系转化
inside_code -= 65248
rstring += unichr(inside_code)
return rstring
def p(s):
s1 = strQ2B(s.decode())
p = re.compile('[()]',re.S)
s1 = p.s