想在一行字符串中找出所有的非负整数,例如"+14010-5+3"中的+14,0,10,+3。但不返回-5or5。代码如下:print(re.findall(r"(\+\d+|[^-]\d+|[0]+)","+14010-5+3"))#line1print(re.findall(r"[^-](\+\d+|\d+|[0]+)","+14010-5+3"))#line2print(re.search(r"[^-](\+\d+|\d+|[0]+)","+14010-5+3"))#line3print(re.search(r"[^-](\+)?\d+","+14010-5+3"))#line4print(re.findall(r"[^-](\+)?\d+","+14010-5+3"))#line5输出结果:['+14','0','10','+3']['14','0','10','+3']['','','','+']详细问题:(1)按说line1和line2结果应该一样吧?(2)按说line2的第一个返回项,应该和第三行一样,是“+14”吧?为什么是“14”呢?(3)按说line4和line5的第一个返回结果一样都是“+14”吧?为什么出来是''空字符呢?网上找正则表达测试,我的正则表达都能输出我想要的结果,是python的问题吗?
2 回答
Qyouu
TA贡献1786条经验 获得超11个赞
对于line2到line5,都是1跟+匹配,然后括号里跟剩下的字符串匹配。由于你第一字符没有捕获,所以findall的结果中没有第一个正号。而match返回的匹配的对象,并不需要捕获,所以是+14。-↩
添加回答
举报
0/150
提交
取消