我有这种文字:"SomeText(SFsdf, yjuvk) AnotherSample(sadfsdfg) AndThereToo(sdfhfkh) WhyNotHere(k,hjhtrs) ThatsNeverTooMuch(zdrtyuouijyhre)"
,我想获得所有括号的内容。 (作为列表)
我已经尝试过了:
str = "SomeText(SFsdf, yjuvk) AnotherSample(sadfsdfg) AndThereToo(sdfhfkh) WhyNotHere(k,hjhtrs) ThatsNeverTooMuch(zdrtyuouijyhre)"
test = re.search(r"\((.+)\)", str).group(1)
但是它检索到我在第一个开括号和最后一个闭括号之间的字符串,例如:SFsdf, yjuvk) AnotherSample(sadfsdfg) AndThereToo(sdfhfkh) WhyNotHere(k,hjhtrs) ThatsNeverTooMuch(zdrtyuouijyhre
我也尝试过*
,但我收到相同的输出。
甚至有可能,如果可以,怎么办?
您需要re.findall
并制作图案非贪婪,所以:
re.findall(r"\((.+?)\)", s)
# ['SFsdf, yjuvk', 'sadfsdfg', 'sdfhfkh', 'k,hjhtrs', 'zdrtyuouijyhre']
+
是一个贪婪的限定词,表示它将匹配尽可能多的文本。因此,与其在下一个匹配的)
中停止,不如在最后一个匹配所有文本:
re.search(r"\((.+)\)", s).group(0)
# (SFsdf, yjuvk) AnotherSample(sadfsdfg) AndThereToo(sdfhfkh)...'
通过将?
添加到您的限定词中,它将以一种非贪婪的方式起作用,因此它将匹配尽可能少的字符。您可以在docs中找到更详细的说明。