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

时间:2013-04-07 16:33:48

标签: python regex string

对于含糊不清的标题表示道歉,但我不知道如何用一句话来表达我的问题。

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

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

使用以下代码在Python中成功运行。

m = re.search( "^.*\((.*)\).*" ,input)
if m:
    print(m.groups()[0])

关闭括号)可能位于最外面的括号内时,会出现问题。例如,我给出的当前代码

nsfnje (19(33)22) sfssf

作为输入将返回

19(33

但我希望它能够回归。

19(33)22

我不知道如何解决这个问题,所以任何帮助都会受到赞赏!

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:0)

您的代码未提供19(33,而是33)22

问题在于,正则表达式开头的^.*一直匹配字符串中的 last (,而您实际上想要匹配< em>来自字符串中的第一个 (

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

"\((.*)\)"

如果您想要整行/字符串的匹配以及括号内的内容,请通过添加*

懒惰地进行第一次?匹配
"^.*?\((.*)\).*"

或更好,使用

"^[^(]*\((.*)\).*"