; ,不包括 ; 里面 ()
;
()
string = "Axxx;Bxxx;Cxxx;D(xx;xx)"
output = ["Axxx", "Bxxx"; "Cxxx"; "D(xx;xx)"]
我找到了解决办法:
output = re.split('\;\s*(?![^()]*\))',string)
我查了一下 re
re
即使没有re,也可能有其他的解决方案,但这是我的崩溃 重新拆分
split 函数来自 re
split
我们来打破这个模式
\; -分隔符是分号(斜杠表示转义,防止与特殊代码混淆)
\;
\s* -可能后跟空格或其他空白字符,您不需要将其用作示例,但这不会造成任何影响
\s*
(?! 负面展望 断言。它施加了附加的限制,即哪些分号可以拆分字符串,哪些分号可以忽略。 先行 表示不包括字符串中与子模式匹配的部分 (?! ... ) 进入分离器, 意味着分号应该被视为分隔符 不 然后是禁止的序列。也就是一个可能的空序列( * )非方括号 [^()] 后接右括号 \) xx) 在你的例子中。但是在分号后面有一个表达式是可以的,分号有开始和结束的括号(在你的例子中) D(xx;xx) . 基本上,向前看禁止你进入一对匹配的父母。
(?!
(?! ... )
*
[^()]
\)
xx)
D(xx;xx)
我相信在之前的一篇文章中,我看到了一个更简单的解决方案 re.findall 不需要向前看。
re.findall