如何匹配出现在字符串末尾的一个或多个括号表达式?
输入:
'hello (i) (m:foo)'
Run Code Online (Sandbox Code Playgroud)
期望的输出:
['i', 'm:foo']
Run Code Online (Sandbox Code Playgroud)
用于python脚本.Paren标记不能出现在彼此内部(没有嵌套),并且括号表达式可以用空格分隔.
它比初看起来更难,至少在我看来是如此.
paren_pattern = re.compile(r"\(([^()]*)\)(?=(?:\s*\([^()]*\))*\s*$)")
def getParens(s):
return paren_pattern.findall(s)
Run Code Online (Sandbox Code Playgroud)
甚至更短:
getParens = re.compile(r"\(([^()]*)\)(?=(?:\s*\([^()]*\))*\s*$)").findall
Run Code Online (Sandbox Code Playgroud)
交代:
\( # 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
Run Code Online (Sandbox Code Playgroud)
您不需要使用正则表达式:
def splitter(input):
return [ s.rstrip(" \t)") for s in input.split("(") ][1:]
print splitter('hello (i) (m:foo)')
Run Code Online (Sandbox Code Playgroud)
注意:此解决方案仅在您的输入已知有效时才有效.请参阅MizardX的解决方案,该解决方案适用于任何输入.
| 归档时间: |
|
| 查看次数: |
604 次 |
| 最近记录: |