如何匹配出现在字符串末尾的一个或多个括号表达式?
输入:
'hello (i) (m:foo)'
期望的输出:
['i', 'm:foo']
用于python脚本.Paren标记不能出现在彼此内部(没有嵌套),并且括号表达式可以用空格分隔.
它比初看起来更难,至少在我看来是如此.
paren_pattern = re.compile(r"\(([^()]*)\)(?=(?:\s*\([^()]*\))*\s*$)") def getParens(s): return paren_pattern.findall(s)
甚至更短:
getParens = re.compile(r"\(([^()]*)\)(?=(?:\s*\([^()]*\))*\s*$)").findall
交代:
\( # opening paren ([^()]*) # content, captured into group 1 \) # closing paren (?= # look ahead for... (?:\s*\([^()]*\))* # a series of parens, separated by whitespace \s* # possibly more whitespace after $ # end of string ) # end of look ahead
您不需要使用正则表达式:
def splitter(input): return [ s.rstrip(" \t)") for s in input.split("(") ][1:] print splitter('hello (i) (m:foo)')
注意:此解决方案仅在您的输入已知有效时才有效.请参阅MizardX的解决方案,该解决方案适用于任何输入.