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

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

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

'''

   test.html内容为 :

 

作  者: (美)埃克尔  著,陈昊鹏  译

                       
出 版 社: 机械工业出版社

                       

                               
  • 出版时间: 2007-6-1

  •                            
  • 字  数:

  •                            
  • 版  次: 1

  •                            
  • 页  数: 880

  •                            
  • 印刷时间: 2007-6-1

  •                            
  • 开  本:

  •                            
  • 印  次:

  •                            
  • 纸  张: 胶版纸

  •                            
  • I S B N    : 9787111213826

  •                            
  • 包  装: 平装

  •                        
 

'''

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 )

    你可能感兴趣的:(python)