正则表达式 - 请问python的正则模块有封装好的库吗?
天蓬老师
天蓬老师 2017-04-17 16:44:53
[Python讨论组]

我正在用python的一个爬虫框架写爬虫,爬虫框架自带pyquery来解析html获取想要的内容。但是在使用的过程中感觉不是太通用。有以下两点问题:

  • 同一个网站中联系人的位置老是变动,因为前面的信息个数不一样。html结构变动后pyquery就不能正常获取想要的数据了。

  • 有时候目标节点里还有子节点或是同节点有其它不需要的字符串,获取数据时就会多余很多不需要的字符。

基于以上需求想使用正则表达式来获取想要的内容。但是python的正则表达式对中文支持的不是太好,需要转码才能匹配,规则也不好测试。
请问python有没有封装好的正则类呢?输入包含有中文的正则表达式也能自动转码匹配的

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(1)
高洛峰

Python 正则表达式对中文支持没有任何问题,可以在 unicode 下匹配,可以在 GBK 编码下匹配,也可以在 UTF8 编码匹配。只要正则表达式和字符串都是 unicode,或者采用相同的编码,不会有任何问题。至于比如说用 GBK 编码的正则匹配 UTF8 的字符串,无论哪个正则引擎都做不到,因为这完全不是正则的问题。

在编码问题上,正则匹配和字符串匹配的性质是一样的,如果觉得正则难以理解,可以思考一下字符串匹配。

例如,“搜索”这个词在 Python 中常见的形式有三种:

  • unicode 字符串 u'\u641c\u7d22'

  • GBK 编码字符串 '\xcb\xd1\xcb\xf7'

  • UTF8 编码字符串 '\xe6\x90\x9c\xe7\xb4\xa2'

u'搜' in u'搜索' 在 unicode 下进行匹配,实际上就是 u'\u641c' in u'\u641c\u7d22''搜' in '搜索' 则有点复杂,如果在 GBK 编码的文件或终端下,等价于 '\xcb\xd1' in '\xcb\xd1\xcb\xf7';在 UTF8 编码的文件或终端下,等价于 '\xe6\x90\x9c' in '\xe6\x90\x9c\xe7\xb4\xa2'。但以上三种情况都是 True。然而如果一个字符串是 GBK,另一个是 UTF8,相当于 '\xcb\xd1' in '\xe6\x90\x9c\xe7\xb4\xa2',自然是 False 了。

但这里其实隐藏了一个陷阱,编码后的字符串长度大于 2,GBK 编码下中间两个字符 '\xd1\xcb' 其实是 GBK 编码下的“阉”字。所以可以在 GBK 编码的文件或终端下执行以下语句:

>>> '阉' in '搜索'
True

如果是在 unicode 下,则“搜索”这个词的长度是 2,不会发生这种问题。所以如果先将字符串都转成 unicode 就不容易犯错。除非你对编码问题理解得足够透彻,否则不建议对编码后的字符串进行正则匹配,虽然这是完全可行的。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号