想在一行字符串中找出所有的非负整数,
例如"+14 0 10 -5 +3"中的+14, 0, 10, +3。但不返回-5 or 5。
代码如下:
print(re.findall(r"(\+\d+|[^-]\d+|[0]+)","+14 0 10 -5 +3")) #line1
print(re.findall(r"[^-](\+\d+|\d+|[0]+)","+14 0 10 -5 +3")) #line2
print(re.search(r"[^-](\+\d+|\d+|[0]+)","+14 0 10 -5 +3")) #line3
print(re.search(r"[^-](\+)?\d+","+14 0 10 -5 +3")) #line4
print(re.findall(r"[^-](\+)?\d+","+14 0 10 -5 +3")) #line5
输出结果:
['+14', ' 0', ' 10', '+3']
['14', '0', '10', '+3']
<_sre.SRE_Match object; span=(0, 3), match='+14'>
<_sre.SRE_Match object; span=(0, 3), match='+14'>
['', '', '', '+']
详细问题:
(1)按说line1和line2结果应该一样吧?
(2)按说line2的第一个返回项,应该和第三行一样,是“+14”吧?为什么是“14”呢?
(3)按说line4和line5的第一个返回结果一样都是“+14”吧?为什么出来是''空字符呢?
网上找正则表达测试,我的正则表达都能输出我想要的结果,是python的问题吗?
问题解决了,findall必须开启不捕获模式,在每个括号内部以?:打头就行了
print(re.findall(r"(?:+d+|1d+)","+14 0 10 -5 +3"))
print(re.findall(r"1(?:+d+|d+)","+14 0 10 -5 +3"))
print(re.search(r"1(?:+d+|d+)","+14 0 10 -5 +3"))
print(re.search(r"1(?:+)?d+","+14 0 10 -5 +3"))
print(re.findall(r"1(?:+)?d+","+14 0 10 -5 +3"))
参考资料:
1,pein的答案
2,https://www.cnblogs.com/tk091...
3,https://www.jianshu.com/p/515...