今天写程序的时候发现使用正则表达式的时候不管怎么弄就是匹配不出来。最后发现是编码问题。
import re
text='<title>2009年国家司法考试试卷一--中华人民共和国司法部网站</title>'
pattern=re.compile(r'<title>(\d\d\d\d年国家司法考试试卷[一二三四五])(.*)</title>')
matched=pattern.search(text)
if matched:
print matched.group(1)
else:
print 'not search'
将上面的程序改成下面便可以运行了。
# /usr/bin/env python
# -*- coding:utf-8 -*-
import re
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
text=u'<title>2009年国家司法考试试卷一--中华人民共和国司法部网站</title>'
pattern=re.compile(ur'<title>(\d\d\d\d年国家司法考试试卷[一二三四五]).*</title>')
matched=pattern.search(text)
if matched:
print matched.group(1)
else:
print 'not match'
总结:
1.# -- coding:utf-8 --
2.导入sys模块,reload(sys),再设置系统默认编码,执行 setdefaultencoding('utf-8'),此时将系统默认编码设置为utf8。
3.匹配时正则表达式内有中文,则要在正则表达式前加上u。
# -*- coding: UTF-8 -*-
这句是告诉python程序中的文本是utf-8编码,让python可以按照utf-8读取程
中文前加u就是告诉python后面的是个unicode编码,存储时按unicode格式存储。
也可以用字符串..decode('utf-8')的方式代替字符串前加u
例如,可以把text字符串的u删掉,将matched这句改为如下:
matched=pattern.search(text.decode('utf-8'))