Python中re.findall()跟re.search()得到的匹配值不一样的问题

问题描述:

a = '1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))'
ret = re.findall('\(([1-9]|\-).*?\)',a)
print(ret)
#运行结果
['6', '9', '-', '1']
a = '1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))'
ret = re.search('\(([1-9]|\-).*?\)',a)
print(ret)
#运行结果
(60-30+(-40/5)

明显下面这种才是我们想要的结果,但是findall为什么只返回了几个字母?其实原因就是findall中的小括号是来定义具体匹配结果边界,也就是findall返回的是小括号中的匹配对象,而不是整个单引号中的,而search中是将小括号作为一个优先级的判断符号,所以两者的结果会不一样。

猜你喜欢

转载自www.cnblogs.com/cokefentas/p/10130828.html