【问题标题】:Regular expression with multiple endings具有多个结尾的正则表达式
【发布时间】:2017-03-09 21:43:40
【问题描述】:

我有一个这样的熊猫数据框:

idx  name
1    "NM_014855.2(AP5Z1):c.80_83delGGATinsTGCTGTAAACTGTAACTGTAAA (p.Arg27_Ala362delinsLeuLeuTer)"
2    "NM_014630.2(ZNF592):c.3136G>A (p.Gly1046Arg)"
3    "NM_000410.3(HFE):c.892+48G>A"
4    "NC_000014.9:g.(31394019_31414809)_(31654321_31655889)del"

我需要提取':' 字符后面的任何内容,直到出现以下任何内容:

  • " ("

  • "del"

  • {end of string}

我尝试了以下方法:

df.str.extract(r"\):(.*) \(|\n")

但它并不适用于所有情况。

如何正确指定我需要的条件?

【问题讨论】:

    标签: regex python-3.x pandas


    【解决方案1】:

    使用惰性匹配 *? 最小化 .* 将捕获的数量,然后指定您要查找的停止条件:

    df.str.extract(r":(.*?)(?:\(|del|$)")
    

    正则表达式通常匹配可能的最长字符串,但? 将其切换为匹配最短可能的字符串。

    【讨论】:

    • 正则表达式通常匹配可能最长的字符串是错误的语句。贪婪量词使模式匹配到最右边的后续子模式,而惰性量词使模式匹配最左边的出现(首先找到)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多