1

这是我现在的代码,

import re
matches = re.search(r'^%s\s*\((.*?)\)'%"Hello", "Hello(Hi())")
print matches.group(1)

看到 Hello 后,它将所有内容都放在括号内。例如,

Hello(hi) produces hi

我有一个问题,

Hello(Hi())   produces Hi( and not Hi()

有谁知道我如何通过更改正则表达式来解决这个问题?

4

2 回答 2

3

如果您只关心最外面的括号中的内容,请使用$锚点:

>>> re.match("Hello\((.*)\)$", "Hello(Hi())").group(1)
'Hi()'
>>> re.match("Hello\((.*)\)$", "Hello(Hi(Bye()))").group(1)
'Hi(Bye())'

如果你想匹配嵌套括号,那么 REs 是不可能的,因为你的语言将是上下文无关的,但不是常规的;相反,您可以迭代地将正则表达式应用于正则表达式匹配的结果。

于 2012-05-19T20:37:07.377 回答
1

如果可以有任意级别的嵌套,则正则表达式是不合适的。

如果您可以确定嵌套层数不会超过两层,则可以解决它,但这并不令人愉快:

re.match(r'^%s\s*\(((?:[^()]*|\([^)]*\))*)\)' % re.escape("Hello"), text)

在线查看它:ideone

于 2012-05-19T20:32:18.833 回答