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

本文介绍了在Python中使用正则表达式匹配中文时,需要注意pattern的编码必须和待匹配字符串一致。通过一个实例展示了如何读取gb2312编码的HTML文件,并使用chardet库检测编码,然后对正则表达式进行相应编码转换,成功提取出ISBN、出版日期等信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

'''

   test.html内容为 :

 <div id='author_' >作  者: (美)埃克尔  著,陈昊鹏  译</div>
                        <div id='publisher_'>出 版 社: 机械工业出版社</div>
                        <ul >
                            <li>出版时间: 2007-6-1</li>
                            <li>字  数: </li>
                            <li>版  次: 1</li>
                            <li>页  数: 880</li>
                            <li>印刷时间: 2007-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 = 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'<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 )

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值