我有数百行文字:
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(':', ";")
我以为我只是在所有行中替换了匹配的模式,但它在所有行中用分号替换了每个冒号,有没有办法只指定匹配的模式,或者我的正则表达式是不正确的?感谢。
答案 0 :(得分:3)
这样做的方法是在替换中使用完整的正则表达式,使用捕获组(括号)来捕获要保留的数字。
所以你的搜索词就是:
NS=(\d+):AN=(\d+):DP=(\d+)
你的替换术语就是:
NS=\1;AN=\2;DP=\3
请注意,在替换中,\1
将填入从原始文本中捕获的第一个捕获组(parens)。