[转]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 "未能查找到指定字符"
################################代码结束################################