http://blog.csdn.net/dao123mao/article/details/5408521
python中正则表达式匹配中文是没有问题的,但是其中有一个关键点,那就是pattern中的中文编码必须和要匹配字符串保持一致;下面使用一个例子来说明:
# -*- coding: utf-8 -*-
"""
test.html内容为 :
"""
import re
import chardet #用于检测str的编码
#读文件
def readContent():
f = file(r"/home/fzhong/test.html","r")
content = f.read()
f.close()
return content
#检测str的编码
def checkEncoding(str):
return chardet.detect(str)["encoding"]
def extractAttrValue(regx):
p = re.compile(regx)
attrValue = p.search(self.dataStr).group(1).strip()
return attrValue
if __name__ == "__main__":
content = readContent()
#因为这里的test.html为gb2312编码,所以这里encoding应该为gb2312
encoding = checkEncoding(content)
p_isbn = u"
I S B N :(.*?)".encode(encoding )isbn = extractAttrValue(p_isbn)
#pattern为unicode,转为和content一样的编码,然后执行匹配
p_pub_date = u"
出版时间:(.*)".encode(encoding )pubDate = extractAttrValue(p_pub_date)
p_edition_num = u"
版 次:(.*?)".encode(encoding )editionNum = extractAttrValue(p_edition_num)
p_page_num = u"
页 数:(.*?)".encode(encoding )pageNum = extractAttrValue(p_page_num)
p_author = ur"作 者:(.*?)
".encode(encoding )author = extractAttrValue(p_author)
p_publisher = ur"出 版 社:(.*?)".encode(encoding )
publisher = extractAttrValue(p_publisher)
这里有几个关键点:
p_pub_date = u"
出版时间:(.*)".encode(encoding )执行一个unicode到encoding编码的转换;
当然在上面的脚本中也可以这样:
p_pub_date = "
出版时间:(.*)".decode("UTF-8").encode(encoding )