正则表达式中的意外替换

时间:2014-03-20 15:34:56

标签: regex

我有数百行文字:

  

gi|393925858|gb|AGTA02071966.1| 0000000739 . G A 121.20 PASS NS=74:AN=2:DP=8448 GT:DP:GQ:EC:SG 0/1:262:144:116:R

我想在该部分“NS = 74:AN = 2:DP = 8448”的部分中仅用分号替换冒号。以下是我如何匹配并替换它:

if re.match(r'.*NS=\d+(:)AN=\d(:)DP=\d+.*', line):
    print line.replace(':', ";") 

我以为我只是在所有行中替换了匹配的模式,但它在所有行中用分号替换了每个冒号,有没有办法只指定匹配的模式,或者我的正则表达式是不正确的?感谢。

1 个答案:

答案 0 :(得分:3)

这样做的方法是在替换中使用完整的正则表达式,使用捕获组(括号)来捕获要保留的数字。

所以你的搜索词就是:

NS=(\d+):AN=(\d+):DP=(\d+)

你的替换术语就是:

NS=\1;AN=\2;DP=\3

请注意,在替换中,\1将填入从原始文本中捕获的第一个捕获组(parens)。