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]'),返回结果就是要匹配的结果了。
>正则表达式获取括号内容
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论