Python正则表达式运算

时间:2018-10-30 01:54:25

标签: python

我想按;拆分数据,但不包括;中的()。例如,我有这样的字符串:

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

我希望输出是:

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

我找到了解决方法:

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

它可以工作,我检查了re文档,但是我仍然不知道它如何工作或为什么起作用。有人可以解释吗?

1 个答案:

答案 0 :(得分:3)

即使没有解决方案,也可能有替代解决方案,但这是我的细目分类 重新分割

{p}的

split函数,在匹配模式的任何字符序列中分割字符串,而不仅仅是一个给定的符号或字符串

让我们分解模式

re-分隔符为分号(斜线表示转义,可以防止特殊代码造成混淆)

\;-可能后跟空格或其他空格字符,您无需在示例中使用它,但不会造成伤害

\s*-否定超前断言。它强加了附加限制,即哪些分号要分割字符串,哪些要忽略。 Lookahead 表示不要将与(?!内的子模式匹配的字符串部分包含在分隔符中,表示要视为分隔符,分号应不要后跟禁止的序列。即,非方括号(?! ... )的可能为空的序列(*)后跟右方括号[^()],可以防止出现中断。 (例如您的示例中的\)。但是在带有分号和分号的分号后也可以使用表达式(在您的情况下,xx)。基本上,先行禁止您进入一对匹配的括号内)。

正则表达式的完整列表可以在官方文档中找到,但是如果您难以阅读或理解,请阅读一些教程。

我相信在以前的文章中,我看到了D(xx;xx)的更简单的解决方案,它不需要先行。

PS。有时您会通过re.split收到不需要的空字符串,请记住将其过滤掉