Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python正则表达式搜索最外层的括号_Python_Regex_String - Fatal编程技术网

使用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

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

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

"\((.*)\)"
如果希望匹配整行/字符串以及括号内的内容,则通过添加

"^.*?\((.*)\).*"
或者更好,使用

"^[^(]*\((.*)\).*"
有更多关于为什么正则表达式不适用于一般嵌套的详细信息,如果您确实需要,还有一些替代方法。