python中正则表达式在中文字符串匹配时的坑

摘要:
Python正则表达式已用于匹配中文字符串或具有中英文混合数字的字符串。发现在许多情况下,匹配失败或结果混乱,并且在不同的操作系统上匹配结果不一致。经过长时间的检查,原因不明。今天,我终于明白,是Python中的中文编码问题导致了这一问题。

之前一直有使用python 正则表达式来做中文字符串或者中英文数字混合的字符串的匹配,发现有不少情况下会匹配失灵或者结果混乱,并且在不同操作系统上匹配结果也不一致,查了很久都不知道是什么原因。今天终于彻底弄懂了,原来还是python中对中文的编码问题造成的。

解决办法:

step1 在设置默认编码为UTF8之后,将正则表达式和待匹配字符串都decode("utf8")统一成 unicode再进行匹配;

step2 正则表达式前面一定要加 r ;

示例代码:

        kw_regexp = r'微信'+ kw_str.decode("utf8")
        pattern =re.compile(kw_regexp, re.I)
        result = pattern.search(cont.decode("utf8"))

其中,cont是待匹配字符串,kw_regexp是拼接来的正则表达式字符串,前面一定要加"r"。

免责声明:文章转载自《python中正则表达式在中文字符串匹配时的坑》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇thinkphp第1课:使用thinkphp创建一个项目C++ list容器系列功能函数详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Python自动化学习笔记(二)——Jmeter连接数据库、添加压力机、Charles抓包、Python初识

1.Jmeter连接Mysql数据库 1.1添加jar包 选中测试计划,添加jar包 也可以直接将jar包复制到jmeter的lib目录 1.2添加mysql连接信息 测试计划-配置元件-JDBC Connection Configuration,添加Mysql连接信息 Database URL:jdbc:mysql://ip:port/dbname?u...

django -过滤器的使用

前情提要:   最近工作中用到django 中的      自定制过滤器的内容, 再此 复习一波过滤器和自定制 过滤器的内容 自定制过滤器   1、在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag. 2、在app中创建templatetags模块(模块名只能是templatetags)...

ubuntu 配置vim编辑器

 憋了很久,终于用上了unix下的vim 开发环境: 安装pydiction   pydiction用来实现代码补全和语法提示功能。pydiction不能通过apt安装,需要自行下载安装。 git clone https://github.com/rkulla/pydiction #https://github.com/ma6174/vim 看个人吧...

Python心得基础篇【5】模块

模块,用一砣代码实现了某个功能的代码集合。  类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块。 如:os 是系统相关的模块;file是文件操作相关的模块 模块分为三...

python实现RSA加密解密方法

python3.5 安装pip 1 安装rsa 2 python -m pip install rsa 我们可以生成RSA公钥和密钥,也可以load一个.pem文件进来 1 #-*- coding: utf-8 -*- 2 importrsa 3 4 #先生成一对密钥,然后保存.pem格式文件,当然也可以直接使用 5 (pubkey, privkey)...

python迭代器与生成器及yield

一、迭代器(itertor) 1.可迭代: 在Python中如果一个对象有__iter__()方法或__getitem__()方法,则称这个对象是可迭代的(iterable)。 其中__iter__()方法的作用是让对象可以用“for ... in...”方式来循环遍历,_getitem_()方法是让对象可以通过“实例名[index]”的方式访问实例中的元...