正则表达式以匹配字符串中指定的长度的单词



我正在尝试解析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'

不是最优雅的,但我在运行re.sub之前使用 re.findall 拉出了数值。

ls=re.findall('+(d)',s)
for i in ls:
    s=re.sub('+(%sw{%s})' % (i,i),'*',s)

相关内容

  • 没有找到相关文章

最新更新