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

标签 python regex samtools

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

相关文章:

python - 如何从 MLflow 中删除 run_id

javascript - REGEX - 在 html 注释模式之间插入内容

regex - 从字符串中间删除字符

python - samtools - dyld : Library not loaded: @rpath/libcrypto. 1.0.0.dylib

python - 如何以编程方式创建嵌套目录和文件的 tar 存档,仅来自 Python 字符串且没有临时文件?

python - 如何在Python3.10而不是Python 3.9中使用pip?

python - 在excel中通过vba调用python程序时有没有办法引用事件工作簿?

javascript regexp:匹配::之后的所有内容,但不匹配 >

javascript - 什么 JavaScript RegEx 允许除某些特殊字符外的字母数字字符?

linux - 在哪里将 samtools 二进制文件复制到某些目录