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

yipeiwu_com7年前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生成器是什么

前言 生成器是 Python 初级开发者最难理解的概念之一,虽被认为是 Python 编程中的高级技能,但在各种项目中可以随处见到生成器的身影,你得不得去理解它、使用它、甚至爱上它。 提...

Python实现判断并移除列表指定位置元素的方法

Python实现判断并移除列表指定位置元素的方法

本文实例讲述了Python实现判断并移除列表指定位置元素的方法。分享给大家供大家参考,具体如下: 问题很简单,输入一个列表和索引,若索引超出列表范围则返回源列表,否则删除指定索引位置的元...

python实现登陆知乎获得个人收藏并保存为word文件

这个程序其实很早之前就完成了,一直没有发出了,趁着最近不是很忙就分享给大家. 使用BeautifulSoup模块和urllib2模块实现,然后保存成word是使用python docx模...

python Web开发你要理解的WSGI & uwsgi详解

python Web开发你要理解的WSGI & uwsgi详解

WSGI协议 首先弄清下面几个概念: WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种...

Python assert关键字原理及实例解析

这篇文章主要介绍了Python assert关键字原理及实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Python asse...