使用Python正则表达式搜索最外层的圆括号

2024-05-23 18:10:40 发布

您现在位置:Python中文网/ 问答频道 /正文

很抱歉这个模棱两可的标题,但我不知道如何用一句话来表达我的问题。在

所以我有一些简单的正则表达式代码来提取括号之间的代码。在

^.*\((.*)\).*

这在Python中成功地使用了以下代码。在

^{pr2}$

当右括号)可能在最外面的括号内时,我的问题就出现了。例如,我当前的代码

nsfnje (19(33)22) sfssf

作为输入将返回

19(33

但我希望它能回来。在

19(33)22

我不知道如何解决这个问题,所以任何帮助将不胜感激!在


Tags: 代码标题括号pr2sfssfnsfnje
2条回答

您的代码没有给出19(33,而是给出了33)22。在

问题是正则表达式开头的^.*一直匹配到字符串中的最后一个最后一个(,而实际上您希望从字符串中的第一个匹配。在

如果您只想要最外面的括号内的内容,那么删除正则表达式开头的.*,您也可以删除结尾.*,因为它同样没有任何作用。在

"\((.*)\)"

如果您想要整行/字符串的匹配以及括号内的匹配,那么通过添加?使第一个*延迟匹配

^{2}$

或者更好,使用

"^[^(]*\((.*)\).*"
>>> input = "nsfnje (19(33)22) sfssf"
>>> re.search( "\((.*)\)" ,input).group(1)
'19(33)22'

注意,这将搜索最外层的括号,即使它们是不平衡的(例如"(1(2)))))")。不可能使用单个标准正则表达式搜索平衡括号。有关详细信息,请参见this answer。在

相关问题 更多 >