4

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

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

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

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

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

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

nsfnje (19(33)22) sfssf

作为输入将返回

19(33

但我希望它回来。

19(33)22

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

4

2 回答 2

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

请注意,这会搜索最外层的括号,即使它们是不平衡的(例如"(1(2)))))")。无法使用单个标准正则表达式搜索平衡括号。有关更多信息,请参阅此答案

于 2013-04-07T16:36:10.527 回答
0

你的代码不给19(33,它给33)22

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

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

"\((.*)\)"

如果您想要整个行/字符串的匹配以及括号内的内容,那么*通过添加一个懒惰地进行第一个匹配?

"^.*?\((.*)\).*"

或者更好,使用

"^[^(]*\((.*)\).*"
于 2013-04-07T16:57:50.017 回答