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

yipeiwu_com6年前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函数参数*args**kwargs用法实例

python函数参数*args**kwargs用法实例

复制代码 代码如下:#coding=utf8__author__ = 'Administrator' # 当函数的参数不确定时,可以使用*args和**kwargs。*args没有key...

python算法学习之桶排序算法实例(分块排序)

复制代码 代码如下:# -*- coding: utf-8 -*- def insertion_sort(A):    """插入排序,作为桶排序的子排序"...

Python利用pandas处理Excel数据的应用详解

Python利用pandas处理Excel数据的应用详解

最近迷上了高效处理数据的pandas,其实这个是用来做数据分析的,如果你是做大数据分析和测试的,那么这个是非常的有用的!!但是其实我们平时在做自动化测试的时候,如果涉及到数据的读取和存储...

解决django后台管理界面添加中文内容乱码问题

在学习使用django做一个简单的个人博客项目,通过admin后台添加中文文章内容的时候,遇到中文内容显示乱码的问题。 排除了网上资料中的提到的几个问题: 1.数据上传默认采用的是un...

举例讲解Python编程中对线程锁的使用

锁 python的内置数据结构比如列表和字典等是线程安全的,但是简单数据类型比如整数和浮点数则不是线程安全的,要这些简单数据类型的通过操作,就需要使用锁。 #!/usr/bin/en...