这是我现在的代码,
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