返回信息流m = re.findall('[0-9]*4[0-9]*', '[4]')
可以匹配到4
m = re.findall('([0-9])*4([0-9])*', '[4]')
匹配不到4
请教大牛,这是为什么呢?PS,这个是一个简化的说明,我要用的正则比这个复杂,所以要用到(),表示一个序列的匹配。
补充一点,我放在notepad++中用的时候,两种写法都能匹配出来,不知道为什么python中就不行了。。
这是一条镜像帖。来源:北邮人论坛 / www-technology / #17424同步于 2012/9/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖
【问一个python的问题】
chentingpc
2012/9/2镜像同步1 回复
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
自我了结:
python的正则中用()会进行匹配,所以返回结果是['',''],就是两个()中的匹配。要想达到原来的匹配效果,就是把4匹配出来,有两种解决方法:
1.最外层加个大括号,变成:m = re.findall('(([0-9])*4([0-9])*)', '[4]'),返回结果的第一个元素就是匹配结果了。
2.去除()的匹配结果返回,在括号前面加入?:,变成m = re.findall('(?:\d)*4(?:\d)*', '[4]'),返回结果就是要匹配的结果了。