如何获取字符串的所有括号的内容[重复]

问题描述 投票:0回答:1

我有这种文字:"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

我也尝试过*,但我收到相同的输出。

甚至有可能,如果可以,怎么办?

python regex python-3.x
1个回答
3
投票

您需要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中找到更详细的说明。

© www.soinside.com 2019 - 2024. All rights reserved.