猿问

正则表达,re.findall函数第一项与re.search的match结果不同,求教?

想在一行字符串中找出所有的非负整数,例如"+14010-5+3"中的+14,0,10,+3。但不返回-5or5。
代码如下:
print(re.findall(r"(\+\d+|[^-]\d+|[0]+)","+14010-5+3"))#line1
print(re.findall(r"[^-](\+\d+|\d+|[0]+)","+14010-5+3"))#line2
print(re.search(r"[^-](\+\d+|\d+|[0]+)","+14010-5+3"))#line3
print(re.search(r"[^-](\+)?\d+","+14010-5+3"))#line4
print(re.findall(r"[^-](\+)?\d+","+14010-5+3"))#line5
输出结果:
['+14','0','10','+3']
['14','0','10','+3']
<_sre.SRE_Matchobject;span=(0,3),match='+14'>
<_sre.SRE_Matchobject;span=(0,3),match='+14'>
['','','','+']
详细问题:(1)按说line1和line2结果应该一样吧?(2)按说line2的第一个返回项,应该和第三行一样,是“+14”吧?为什么是“14”呢?(3)按说line4和line5的第一个返回结果一样都是“+14”吧?为什么出来是''空字符呢?
网上找正则表达测试,我的正则表达都能输出我想要的结果,是python的问题吗?
月关宝盒
浏览 788回答 2
2回答

Qyouu

对于line2到line5,都是1跟+匹配,然后括号里跟剩下的字符串匹配。由于你第一字符没有捕获,所以findall的结果中没有第一个正号。而match返回的匹配的对象,并不需要捕获,所以是+14。-↩
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答