是否可以使用反向引用来指定正则表达式中的复制数?
foo ='ADCKAL + 2AG。+ 2AG。+ 2AG。+ 2AGGG + .G + 3AGGa。'
以“+ [0-9]”开头,后跟“[A-z] { n }”的子字符串。需要简单地用'+'替换,其中变量 n 是子字符串中较早的数字。那个 n 可以被反向引用吗?例如(不起作用)'+([0-9])[A-z] {/ 1}。'是我想用“+”替换的模式(最后一个点可以是任何字符并代表质量得分),因此foo应该出现给ADCKAL +++ G.G +。
import re
foo = 'ADCKAL+2AG.+2AG.+2AG.+2AGGG+.+G+3AGGa.'
indelpatt = re.compile('\+([0-9])')
while indelpatt.search(foo):
indelsize=int(indelpatt.search(foo).group(1))
new_regex = '\+%s[ACGTNacgtn]{%s}.' % (indelsize,indelsize)
newpatt=re.compile(new_regex)
foo = newpatt.sub("+", foo)
我可能错过了一种解析字符串的简单方法。
答案 0 :(得分:1)
不,您不能将反向引用用作量词。解决方法是构造一个正则表达式,可以处理交替中的每个案例。
import re
foo = 'ADCKAL+2AG.+2AG.+2AG.+2AGGG^+.+G+3AGGa4.'
pattern = '|'.join('\+%s[ACGTNacgtn]{%s}.' % (i, i) for i in range(1, 10))
regex = re.compile(pattern)
foo = regex.sub("+", foo)
print foo
结果:
ADCKAL++++G^+.+G+4.
另请注意,您的代码包含一个错误,导致它在您输入的输入上输入无限循环。