代码之家  ›  专栏  ›  技术社区  ›  Jonathan

Python正则表达式运算

  •  0
  • Jonathan  · 技术社区  · 7 年前

    ; ,不包括 ; 里面 ()

    string = "Axxx;Bxxx;Cxxx;D(xx;xx)"
    

    output = ["Axxx", "Bxxx"; "Cxxx"; "D(xx;xx)"]
    

    我找到了解决办法:

    output = re.split('\;\s*(?![^()]*\))',string)
    

    我查了一下 re

    1 回复  |  直到 7 年前
        1
  •  3
  •   Serge    7 年前

    即使没有re,也可能有其他的解决方案,但这是我的崩溃 重新拆分

    split 函数来自 re

    我们来打破这个模式

    \; -分隔符是分号(斜杠表示转义,防止与特殊代码混淆)

    \s* -可能后跟空格或其他空白字符,您不需要将其用作示例,但这不会造成任何影响

    (?! 负面展望 断言。它施加了附加的限制,即哪些分号可以拆分字符串,哪些分号可以忽略。 先行 表示不包括字符串中与子模式匹配的部分 (?! ... ) 进入分离器, 意味着分号应该被视为分隔符 然后是禁止的序列。也就是一个可能的空序列( * )非方括号 [^()] 后接右括号 \) xx) 在你的例子中。但是在分号后面有一个表达式是可以的,分号有开始和结束的括号(在你的例子中) D(xx;xx) . 基本上,向前看禁止你进入一对匹配的父母。

    我相信在之前的一篇文章中,我看到了一个更简单的解决方案 re.findall 不需要向前看。