Skip to main content
 首页 » 编程设计

python之正则表达式选择除方括号 [] 中的分号之外的每个分号

2025年05月04日27lori

我想根据分号拆分字符串,除了方括号内的分号!

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', 

这甚至删除了方括号内的所有分号。 如何维护方括号和其中的分号并在所有其他分号的基础上拆分。

请您参考如下方法:

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

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

(?![^\[\]]*\]) 是断言 ; 不在 [...] 。

RegEx Demo

输出”

'[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'