Python正则表达式匹配中文

本文介绍了如何在Python中使用正则表达式匹配中文字符,包括UTF-8和Unicode的区别,示例程序以及中日韩字符集的编码范围。重点讨论了匹配中文的正则表达式,如^[u4E00-u9FFF]+$,并提供了匹配混合内容的解决方案。
摘要由CSDN通过智能技术生成
               

参照Python正则表达式指南

在使用Python的过程中,由于需求原因,我们经常需要在文本或者网页元素中用Python正则表达式匹配中文,但是我们经常所熟知的正则表达式却只能匹配英文,而对于中文编码却望尘莫及,于是我大量Google,几经Baidu,花了两个多个小时测试,终于发现解决的办法。特记录如下

从字符串的角度来说,中文不如英文整齐、规范,这是不可避免的现实。本文结合网上资料以及个人经验,以 python 语言为例,稍作总结。欢迎补充或挑错。 
通常我们可以使用 repr()函数查看字串的原始格式。这对于写正则表达式有所帮助。 

Python正则表达式的问题

更加详细的Python正则表达式问题,请参见这里http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html

    Python 的 re模块有两个相似的函数:re.match(), re.search 。

    两个函数的匹配过程完全一致,只是起点不同。
    match只从字串的开始位置进行匹配,如果失败,它就此放弃;

    而search则会锲而不舍地完全遍历整个字串中所有可能的位置,直到成功地找到一个匹配,或者搜索完字串,以失败告终。

    如果你了解match的特性(在某些情况下比较快),大可以自由用它;如果不太清楚,search通常是你需要的那个函数。

    从一堆文本中,找出所有可能的匹配,以列表的形式返回,这种情况用findall()这个函数。例子见后面的代码。 

UTF-8与unicode

    UTF-8 是变长的,1-6个字节,少数是汉字每个占用3个字节,多数占用4个字节,正则式为[\x80-\xff]{3},这个都知道了吧。 
    unicode下,汉字的格式如\uXXXX,只要找到对应的字符集的范围,就能匹配相应的字串,方便从多语言文本中挑出所需要的某种语言的文本。不过,对于像日文这样的粘着语,既有中文字符,又有平假名片假名,或许结果会有所偏差。 

两种字符类可以并列在一起使用,例如,平假名、片假名、中文的放在一起,u"[\u4e00-\u9fa5\u3040-\u309f\u30a0-\u30ff]+",来自定义所需要匹配的文本。 

匹配中文时,正则表达式和目标字串的格式必须相同。这一点至关重要。或者都用默认的utf8,此时你不用额外做什么;如果是unicode,就需要在正则式之前加上u""格式。 

可以这样定义unicode字符串:string=u"我爱正则表达式"。如果字串不是unicode的,可以使用unicode()函数转换之。如果你知道源字串的编码,可以使用newstr=unicode(oldstring, original_coding_name)的方式转换,

例如 linux 下常用unicode(string, "utf8"),windows 下或许会用cp936吧

示例程序1

# -*- codi
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值