Python 正则表达式 ~ 简单的问题



这是我现在的代码,

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

它看到 Hello 后,它会在括号内获取所有内容。举个例子,

Hello(hi) produces hi

我有一个问题,

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

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

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

>>> re.match("Hello((.*))$", "Hello(Hi())").group(1)
'Hi()'
>>> re.match("Hello((.*))$", "Hello(Hi(Bye()))").group(1)
'Hi(Bye())'
如果你想匹配嵌套的括号,这是不可能的,

因为你的语言将是上下文无关的,但不是规则的;相反,你可以迭代地将正则表达式应用于正则表达式匹配的结果。

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

如果你可以确定永远不会超过两个级别的嵌套,它可以解决,但这并不令人愉快:

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

在线查看它的工作:ideone

最新更新