Python程序编码问题

今天写程序的时候发现使用正则表达式的时候不管怎么弄就是匹配不出来。最后发现是编码问题。

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'))
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 字符集和编码简介 在编程中常常可以见到各种字符集和编码,包括ASCII,MBCS,Unicode等字符集。确切的说...
    兰山小亭阅读 8,576评论 0 13
  • http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的J...
    燕京博士阅读 7,615评论 1 118
  • 几个基本概念 bit二进制位, 是计算机内部数据储存的最小单位,11010100是一个8位二进制数。一个二进制位只...
    西电大侠阅读 3,590评论 1 8
  • 个人笔记,方便自己查阅使用 Py.LangSpec.Contents Refs Built-in Closure ...
    freenik阅读 67,750评论 0 5
  • 可以看我的博客 lmwen.top 或者订阅我的公众号 简介有稍微接触python的人就会知道,python中...
    ayuLiao阅读 3,151评论 1 5