具有多个结尾的正则表达式

时间:2017-03-09 21:43:41

标签: regex python-3.x pandas

我有一个像这样的pandas DataFrame:

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")

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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