正则表达式选择每个分号,但方括号[]中包含的分号除外

时间:2016-04-09 16:39:10

标签: python regex split

我想分割一个基于分号的字符串,除了方括号内的分号!

string="'[Forsyth, Jennifer K.; Asarnow, Robert F.] Univ Calif Los Angeles, Dept Psychol, Los Angeles, CA 90095 USA; [Bachman, Peter] Univ Pittsburgh, Dept Psychiat, Pittsburgh, PA 15213 USA; [Mathalon, Daniel H.] Univ Calif San Francisco, Dept Psychiat, San Francisco, CA 94143 USA; [Mathalon, Daniel H.; Roach, Brian J.] San Francisco VA Med Ctr, San Francisco, CA 94121 USA; [Asarnow, Robert F.] Univ Calif Los Angeles, Dept Psychiat & Biobehav Sci, Los Angeles, CA 90095 USA'"

当我使用

strung=filter(None, re.split("[;]", string))

输出

["'[Forsyth, Jennifer K.",

 ' Asarnow, Robert F.] Univ Calif Los Angeles, Dept Psychol, Los Angeles, CA 90095 USA',

 ' [Bachman, Peter] Univ Pittsburgh, Dept Psychiat, Pittsburgh, PA 15213 USA',

即使在方括号内,也删除了所有分号。 如何在其中保留方括号和分号,并在所有其他分号的基础上拆分。

2 个答案:

答案 0 :(得分:4)

您可以使用基于负前瞻的正则表达式进行拆分:

strung = filter(None, re.split(r';(?![^\[\]]*\])', string))

(?![^\[\]]*\])是断言;不在[...]范围内的负面预测。

RegEx Demo

<强>输出&#34;

'[Forsyth, Jennifer K.; Asarnow, Robert F.] Univ Calif Los Angeles, Dept Psychol, Los Angeles, CA 90095 USA
[Bachman, Peter] Univ Pittsburgh, Dept Psychiat, Pittsburgh, PA 15213 USA
[Mathalon, Daniel H.] Univ Calif San Francisco, Dept Psychiat, San Francisco, CA 94143 USA
[Mathalon, Daniel H.; Roach, Brian J.] San Francisco VA Med Ctr, San Francisco, CA 94121 USA
[Asarnow, Robert F.] Univ Calif Los Angeles, Dept Psychiat & Biobehav Sci, Los Angeles, CA 90095 USA'

答案 1 :(得分:2)

括号在正则表达式中具有不同的含义 - 通常它们用于匹配字符列表中的单个字符。无论如何,你想要的实际上是这样的:

\[;\]

这会转义正则表达式中的括号。