【问题标题】:Regex to select every semicolon except the ones enclosed within Square brackets []正则表达式选择除方括号 [] 中的分号之外的每个分号
【发布时间】:2016-04-09 16:39:09
【问题描述】:

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

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

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

【问题讨论】:

    标签: python regex split


    【解决方案1】:

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

    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'
    

    【讨论】:

    • 非常感谢,我尝试转义括号,但我错过了!
    • @Thomas Christensen 是的,我确实等了 10 分钟才接受答案。非常优雅的解决方案。我用了大约一个小时左右,但没弄好。
    • @vds5344 我没有意识到你必须等待。我只是很兴奋:-)
    • 成为新会员的好处。我只是有很多东西要学。 不堪重负
    • 但是,这个正则表达式不检查分号是否真的在方括号内,它只在右方括号之前匹配它们而不检查左方括号。
    【解决方案2】:

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

    \[;\]
    

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

    【讨论】:

    • OP 并没有真正尝试拆分文字 [;]
    • 啊,我看到你正确地解决了他的真实问题:-)
    • 我的错,我猜我没有正确表达这个问题。感谢您的回答。
    猜你喜欢
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多