正则表达式替换(如果发现模式替换为符号符号)

问题描述:

我有几行文本(RNA序列),我想制作一个关于字符保护的矩阵,因为它们根据相似性进行对齐。正则表达式替换(如果发现模式替换为符号符号)

但我有几个空白(-),实际上意味着缺少一个完整的结构(例如#- > 100)如果发生这种情况,我想改变点(用于区分的其他符号)与找到相同的数量。

我想我可以用正则表达式来做到这一点,但是我不能仅仅替换模式,或者当我这样做时,我用一些不正确的点数来替换所有的东西。

我的代码如下所示:

with alnfile as f_in: 
    if re.search('-{100,}', elem,): 
      elem = re.sub('-{100,}','.', elem,) #failed alternative*len(m.groups(x)), elem) 
      print len(elem) # check if I am keeping the lenghth of my sequence 
      print elem[0:100] # check the start 

      f1.write(elem) 

,如果我的文件是:

ONE ----(*100)atgtgca----(*20) 

我越来越:

ONE ..(*100)atgtgca----(*20) 

我的另一变化是唯一的点,然后我得到:

ONE ....(*100)atgtgca....(*20) 

我需要什么:

ONE ....(*100)atgtgca----(*20) 

我知道我失去了一些东西,但我无法弄清楚?有没有一个国旗或东西可以帮助我,或者是否会允许这样做的确切变化?

+0

什么是'x' ???? –

+0

对不起,这是一个尝试: m = re.search(' - {100,}',elem,) x(1,len(m.groups(x)))....但是,不工作(我应该拿掉) – Nelly

+0

你知道' - {100,}'匹配100个连字符吗?你想替换这些子字符串吗? –

你可以尝试以下方法:

data = "ONE " + "-" * 100 + "atgtgca" + "-" * 20 
print re.sub(r'-{100,}', lambda x: '.' * len(x.group(0)), data) 

这将显示:

ONE ....................................................................................................atgtgca-------------------- 
+0

...我不明白lambda x的用法吗? – Nelly

+0

我认为你没有正确复制它,你有'X'和'x',它们需要是相同的。我建议你复制/粘贴屏幕。 –

+0

'lambda'只是用来作为一种抛弃功能。它可以用一个单独的功能替换。 –