我想分割一个基于分号的字符串,除了方括号内的分号!
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',
即使在方括号内,也删除了所有分号。 如何在其中保留方括号和分号,并在所有其他分号的基础上拆分。
答案 0 :(得分:4)
您可以使用基于负前瞻的正则表达式进行拆分:
strung = filter(None, re.split(r';(?![^\[\]]*\])', string))
(?![^\[\]]*\])
是断言;
不在[...]
范围内的负面预测。
<强>输出&#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)
括号在正则表达式中具有不同的含义 - 通常它们用于匹配字符列表中的单个字符。无论如何,你想要的实际上是这样的:
\[;\]
这会转义正则表达式中的括号。