[转]Python正则表达式中匹配GBK/UTF8编码中文字符_绝冬之地_百度空间

[转]Python正则表达式中匹配GBK/UTF-8编码中文字符_绝冬之地_百度空间

[转]Python正则表达式中匹配GBK/UTF-8编码中文字符
2009年10月14日 14:21

Python的正则表达式匹配和源代码编码相同的中文字符

如果源代码为GBK,则对于UTF-8编码中文字符无法匹配

如果源代码为UTF-8,则对于GBK编码中文字符无法匹配

所以此时如果需要匹配和源代码编码不同中文字符,只有采用\x12\x34的HEX编码方式进行匹配

下边是使用encode库将GBK和UTF-8编码汉字转换为\x12\x34的HEX编码的方法,并进行正则表达式匹配

请将源文件保存为UTF-8格式

# -*- coding:UTF-8 -*-

################################代码如下################################

import re

def UTF2Hex(s):

    temp = s.encode("UTF-8").encode("hex")

    line = ""

    for i in range(0,len(temp)-1,2):

        line += "\\x" + temp[i] + temp[i+1]

    return line



def GBK2Hex(s):

    temp = s.encode("GBK").encode("hex")

    line = ""

    for i in range(0,len(temp)-1,2):

        line += "\\x" + temp[i] + temp[i+1]

    return line



print UTF2Hex(u"转载请注明文章来源")

print GBK2Hex(u"转载请注明文章来源")



#这样就可以使用HEX编码后的进行正则匹配了,将源文件保存为UTF-8格式

#会发现编码不同正则表达式会匹配不同的结果

s = "转载请注明文章来源 匹配文档 end"

t_utf = re.match("\xe8\xbd\xac\xe8\xbd\xbd\xe8\xaf\xb7\xe6\xb3\xa8\xe6\x98\x8e\xe6\x96\x87\xe7\xab\xa0\xe6\x9d\xa5\xe6\xba\x90(.*?)end",s)

print t_utf and t_utf.group(1) or "未能查找到指定字符"

t_gbk = re.match("\xd7\xaa\xd4\xd8\xc7\xeb\xd7\xa2\xc3\xf7\xce\xc4\xd5\xc2\xc0\xb4\xd4\xb4(.*?)end",s)

print t_gbk and t_gbk.group(1) or "未能查找到指定字符"

#直接匹配汉字字符,等同UTF-8编码,因为文件保存为UTF-8格式

t = re.match("转载请注明文章来源(.*?)end",s)

print t and t.group(1) or "未能查找到指定字符"

################################代码结束################################
原文地址:https://www.cnblogs.com/lexus/p/2391666.html