这是我现在的代码,
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()
是否有人知道如何通过更改正则表达式来解决此问题?
答案 0 :(得分:3)
如果您关心的是最外面的括号中的内容,那么请使用$
锚:
>>> re.match("Hello\((.*)\)$", "Hello(Hi())").group(1)
'Hi()'
>>> re.match("Hello\((.*)\)$", "Hello(Hi(Bye()))").group(1)
'Hi(Bye())'
如果您想匹配嵌套括号,则RE无法实现这一点,因为您的语言将是context-free,而不是regular;相反,您可以迭代地将正则表达式应用于正则表达式匹配的结果。
答案 1 :(得分:1)
如果可以有任意级别的嵌套,那么正则表达式是不合适的。
如果你可以确定嵌套的级别永远不会超过两级,那么它可以解决,但这并不令人愉快:
re.match(r'^%s\s*\(((?:[^()]*|\([^)]*\))*)\)' % re.escape("Hello"), text)
查看在线工作:ideone