200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > Python中的正则表达式匹配中文问题

Python中的正则表达式匹配中文问题

时间:2023-01-31 13:15:24

相关推荐

Python中的正则表达式匹配中文问题

python中正则表达式匹配中文是没有问题的,但是其中有一个关键点,那就是pattern中的中文编码必须和要匹配字符串保持一致;下面使用一个例子来说明:

# -*- coding: utf-8 -*-

'''

test.html内容为 :

<div id='author_' >作者: (美)埃克尔 著,陈昊鹏 译</div>

<div id='publisher_'>出 版 社: 机械工业出版社</div>

<ul >

<li>出版时间: -6-1</li>

<li>字数: </li>

<li>版次: 1</li>

<li>页数: 880</li>

<li>印刷时间: -6-1</li>

<li>开本: </li>

<li>印次: </li>

<li>纸张: 胶版纸</li>

<li>I S B N : 9787111213826</li>

<li>包装: 平装</li>

</ul>

'''

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 = pile(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'<li>I S B N :(.*?)</li>'.encode(encoding )

isbn = extractAttrValue(p_isbn)

#pattern为unicode,转为和content一样的编码,然后执行匹配

p_pub_date = u'<li>出版时间:(.*)</li>'.encode(encoding )

pubDate = extractAttrValue(p_pub_date)

p_edition_num = u'<li>版次:(.*?)</li>'.encode(encoding )

editionNum = extractAttrValue(p_edition_num)

p_page_num = u'<li>页数:(.*?)</li>'.encode(encoding )

pageNum = extractAttrValue(p_page_num)

p_author = ur'作者:(.*?)</div>'.encode(encoding )

author = extractAttrValue(p_author)

p_publisher = ur'出 版 社:(.*?)</div>'.encode(encoding )

publisher = extractAttrValue(p_publisher)

这里有几个关键点:

p_pub_date = u'<li>出版时间:(.*)</li>'.encode(encoding )

执行一个unicode到encoding编码的转换;

当然在上面的脚本中也可以这样:

p_pub_date = '<li>出版时间:(.*)</li>'.decode('UTF-8').encode(encoding )

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。