python 这个正则表达式哪里错了 请指教
发布网友
发布时间:2022-05-06 15:55
我来回答
共4个回答
热心网友
时间:2023-10-10 22:02
这个是这样的~
正则表达式 .*(ab)? 匹配时 首先.*是贪婪匹配会匹配到所有的文本,之后再去匹配(ab)?
因为使用了? 表示0次或一次,这里因为没有东西可匹配了,匹配了0次,所以使用re.search
时 group(0) 为全部的,group(1) 因为括号中的ab没有匹配到东西,所以为none
同样的.匹配任意字符,然后后面的(ab)?也可以匹配,所以直接是ok了
group(0)就为第一个字符e,(ab)?没有匹配到东西,所以group(1)也为none
想匹配第一次出现的地方,可以使用 re.search(r'.*?(ab)', 'eeabababa')
这时的group(0) 就为eeab ,group(1) 为ab ~
热心网友
时间:2023-10-10 22:02
search只是找,print不出来吧,你print的是group()?
而且你是要找出现ab的地方,为啥要用那个?,?表示出现或不出现都行。
直接search(r'ab','xxxabxx')就行
我觉呢你是混了sed和python,sed里面是对一整行操作,从开头匹配,所以要有.*匹配ab之前出现的东西。python的re.search直接就是在后面的字符串里找匹配,从任意地方匹配,所以你只要关注你要找啥就好
热心网友
时间:2023-10-10 22:03
?的用法错了,获取分组的接口也错了,试一下下面的
print re.search(r'.*?(ab)', 'eeabababa').groups( )[ 0 ]
print re.search(r'.*(ab)','eeabababa').groups( )[ 0 ]
至于原因,上百度搜"正则表达式的贪婪和非贪婪匹配模式".
热心网友
时间:2023-10-10 22:03
a: print re.search(r'.*?(ab)', 'eeabababa')
b: print re.search('.(ab)','eeabababa')