首页 > 请问python的正则模块有封装好的库吗?

请问python的正则模块有封装好的库吗?

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

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


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

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

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

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 就不容易犯错。除非你对编码问题理解得足够透彻,否则不建议对编码后的字符串进行正则匹配,虽然这是完全可行的。

【热门文章】
【热门文章】