我正在尝试解析 samtools mpileup 的文本输出。我从一个字符串开始
s = '.$......+2AG.+2AG.+2AGGG'
每当我有一个 +
后跟一个整数 n
时,我想选择该整数后面的 n 个字符并将整个字符替换为 *
。所以对于这个测试用例,我会
'.$......+2AG.+2AG.+2AGGG' ---> '.$......*.*.*GG'
我有正则表达式 \+[0-9]+[ACGTNacgtn]+
但结果是输出 .$......*.*.*
和尾随的 G 也丢失了。如何选择 n 个字符,其中 n 提前未知但在字符串本身中指定?
最佳答案
re.sub
中的repl
参数可以是字符串或函数。
因此,您可以使用函数替换来完成非常复杂的事情:
def removechars(m):
x=m.group()
n=re.match(r'\+(\d+).*', x).group(1) # digit part
return '*'+x[1+len(n)+int(n):]
解决您的问题:
>>> re.sub(r'\+[0-9]+[ACGTNacgtn]+', removechars, s)
'.$......*.*.*GG'
关于python - 正则表达式匹配字符串中指定长度的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29856451/