使用Python正则表达式搜索最外层的括号
很抱歉标题含糊不清,但我不知道如何用一句话来表达我的问题 所以我有一些简单的正则表达式代码来提取括号之间的代码使用Python正则表达式搜索最外层的括号,python,regex,string,Python,Regex,String,很抱歉标题含糊不清,但我不知道如何用一句话来表达我的问题 所以我有一些简单的正则表达式代码来提取括号之间的代码 ^.*\((.*)\).* 这在Python中成功地使用了以下代码 m = re.search( "^.*\((.*)\).*" ,input) if m: print(m.groups()[0]) 当结束括号(代码)可能位于最外层括号内时,我的问题就会出现。例如,我的当前代码在给定时 nsfnje (19(33)22) sfssf 作为输入将返回 19(33 但我希望
^.*\((.*)\).*
这在Python中成功地使用了以下代码
m = re.search( "^.*\((.*)\).*" ,input)
if m:
print(m.groups()[0])
当结束括号(代码)可能位于最外层括号内时,我的问题就会出现。例如,我的当前代码在给定时
nsfnje (19(33)22) sfssf
作为输入将返回
19(33
但我希望它能回来
19(33)22
我不知道如何解决这个问题,所以任何帮助都将不胜感激
>>> input = "nsfnje (19(33)22) sfssf"
>>> re.search( "\((.*)\)" ,input).group(1)
'19(33)22'
请注意,这将搜索最外层的圆括号,即使它们是不平衡的(例如,
“(1(2);”)”
)。无法使用单个标准正则表达式搜索平衡括号。有关更多信息,请参阅。您的代码没有给出19(33
,而是给出33)22
问题是正则表达式开头的^.*
一直匹配到字符串中的最后一个(
),而实际上您希望从字符串中的第一个(
)开始匹配
如果您只需要最外层括号中的内容,那么删除正则表达式开头的*
,也可以删除结尾的*
,因为它同样没有任何作用
"\((.*)\)"
如果希望匹配整行/字符串以及括号内的内容,则通过添加?
"^.*?\((.*)\).*"
或者更好,使用
"^[^(]*\((.*)\).*"
有更多关于为什么正则表达式不适用于一般嵌套的详细信息,如果您确实需要,还有一些替代方法。