Python Regex~简单的问题

时间:2012-05-19 20:28:03

标签: python regex string

这是我现在的代码,

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()

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

2 个答案:

答案 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