python中使用正则表达匹配指定的中文字符

目前还在python爬虫的学习中,遇到了对爬取的网页源码无法匹配其中的中文的问题,今天把解决方法给总结了一下:

response = urllib2.urlopen(request, context = context)
data = response.read()

在这里获取的网页源码如果直接用正则进行匹配是查找不到中文字符的,需要加上下面一句,将字符编码转换为unicode编码

data = unicode(data, "gb2312")

之后再进行中文字符的匹配就可以查找到指定的字符了

restr = ur"工作职责"
regex = re.compile(restr, re.IGNORECASE)
list = regex.findall(data)
print list[0]

结果就可以查找到“工作职责”这几个中文字符了。
关于为什么写了这个就可以了,原因如下:
首先先了解一下python中文的编码环境问题:
1.Python文件默认的编码格式是ascii ,无法识别汉字,因为ascii码中没有中文。
2.所以py文件中要写中文字符时,一般在开头加 # -- coding: utf-8 -- 或者 #coding=utf-8。
这是指定一种编码格式,意味着用该编码存储中文字符(也可以是gbk、gb2312等)。
简单来说就是:编码意味着 unicode -> ch-str,解码意味着 ch-str -> unicode,
因此我们可以通过chardet查看爬取网页的源码编码格式是什么,接着再使用对应的编码将其unicode,然后才可以进行中文的正则匹配。
注意:1.由于我上面的网页源码是“gb2312”编码,因此我使用unicode(data,“gb2312”)
2 .关于python的chardet这个模块,功能主要是检测传入数据的编码格式,具体的细节可以自行查阅相关资料

Python使用正则表达匹配中文字符,你可以使用Unicode属性或者特定的Unicode范围来匹配中文字符一般位于Unicode编码的Basic Multilingual Plane (BMP)的CJK统一汉字区域,其编码范围大致是从`\u4e00`到`\u9fff`。以下是一些示例代码,展示了如何使用正则表达式来匹配中文字符: ```python import re # 使用Unicode范围匹配中文字符 pattern = r'[\u4e00-\u9fff]' text = "这是一个包含中文字符字符串:中文" matches = re.findall(pattern, text) print(matches) # 输出匹配到的中文字符列表 # 使用Unicode属性 \p{L} 匹配任何语言的字母字符,包括中文 pattern = r'\p{L}' text = "这是一个包含中文字符字符串:中文" matches = re.findall(pattern, text) print(matches) # 输出匹配到的中文字符列表 # 使用re.UNICODE或re.U标志,这样\w、\W、\b、\B、\d、\D、\s和\S会匹配所有字符 pattern = r'\w' text = "这是一个包含中文字符字符串:中文" matches = re.findall(pattern, text, flags=re.UNICODE) print(matches) # 输出匹配到的中文字符和字母数字字符列表 # 注意:在Python 3正则表达式模块默认就是支持Unicode的 ``` 在使用正则表达匹配中文字符时,你需要注意Python版本和库对Unicode的支持。在Python 3正则表达式模块默认支持Unicode,而Python 2可能需要在模式字符加入`u`前缀来确保模式字符串被作为Unicode字符串处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值