python正则表达式中的括号匹配问题

yipeiwu_com5年前Python基础

问题:

m = re.findall('[0-9]*4[0-9]*', '[4]')
可以匹配到4.
m = re.findall('([0-9])*4([0-9])*', '[4]')
匹配不到4.
这是为什么呢?PS,这个是一个简化的说明,我要用的正则比这个复杂,所以要用到(),表示一个序列的匹配。
补充一点,我放在notepad++中用的时候,两种写法都能匹配出来,不知道为什么python中就不行了。

答案:

python的正则中用()会进行匹配,所以返回结果是['',''],就是两个()中的匹配。要想达到原来的匹配效果,就是把4匹配出来,有两种解决方法:

1.最外层加个大括号,变成:m = re.findall('(([0-9])*4([0-9])*)', '[4]'),返回结果的第一个元素就是匹配结果了。
2.去除()的匹配结果返回,在括号前面加入?:,变成m = re.findall('(?:\d)*4(?:\d)*', '[4]'),返回结果就是要匹配的结果了。

相关文章

python xlwt如何设置单元格的自定义背景颜色

问题 我使用python 2.7和xlwt模块进行excel导出 我想设置我知道可以使用的单元格的背景颜色 style1 = xlwt.easyxf('pattern: patter...

Python从使用线程到使用async/await的深入讲解

前言 为了简化并更好地标识异步IO,从Python 3.5开始引入了新的语法async和await,可以让coroutine的代码更简洁易读。 请注意,async和await是针对cor...

Python 虚拟空间的使用代码详解

Python 虚拟空间的使用代码详解

具体代码如下所示: # 在项目根目录创建 python3 -m venv 虚拟空间名称 ## 如 python3 -m venv myvenv # 对于 macOS ## 在项目根...

Pyinstaller打包.py生成.exe的方法和报错总结

Pyinstaller 打包.py生成.exe的方法和报错总结 简介 有时候自己写了个python脚本觉得挺好用想要分享给小伙伴,但是每次都要帮他们的电脑装个python环境。虽然说装一...

python实现手机通讯录搜索功能

本文实例为大家分享了python通过输入联系人首字母查询联系人的具体代码,供大家参考,具体内容如下 # -*- coding:utf-8 -*- # 练习2: # 模拟手机通讯录...