我有一个简单的函数,它从一个字符串中产生至少连续N的所有延伸:
def get_gap_coordinates(sequence, gapSize=25):
gapPattern = "N{"+str(gapSize)+",}"
p = re.compile(gapPattern)
m = p.finditer(sequence)
for gap in m:
start,stop = gap.span()
yield(start,stop)
现在我想要一个完全相反的函数:匹配所有不连续的字符(至少是gapsizen)。这些延伸可以出现在字符串中任何位置(开始、中间和结尾),任何给定的数字。在
我已经调查过周围的情况并试过了
^{pr2}$但这不能满足我的需要。 非常感谢任何帮助!在
编辑: 例如:序列nnnnnn actgacgtnnnactgacnnn with应匹配gapSize=5的ACTGACGTNNNACTGAC和gapSize=3的ACTGACGT&ACTGAC。在
我想用regex直接匹配想要的块,但是没有想到什么好东西。我认为最好是不断地寻找间隙,并简单地使用间隙坐标来获得好的块坐标。我是说,它们基本上是一样的,对吧?间隙限位器是块启动,间隙启动是块停止。在
消极展望似乎可以工作。E、 g.对于间隙尺寸3,regexp为:
试试看here。在
^{pr2}$警告:如果字符串不是以“N”序列开头,则在字符串开头可能不匹配。但是你总是可以用间隔大小乘以左边的N来填充字符串。在
所以这里有一个纯regex解决方案,它似乎是您想要的,但我想知道是否有更好的方法来实现它。我会在提出备选方案时添加它们。我使用了几个在线regex工具以及在shell中玩。在
One of the tools有一个很好的正则表达式图形和生成工具,因此答案code:regex(间隔为10)是:
用法:
^{pr2}$所以如果你仔细想想,你会发现一个间隙的开始是一个非间隙的结束,反之亦然。因此,使用一个简单的regex:迭代间隙,向循环添加逻辑以跟踪非gap跨距和
^{3}$yield
跨距。(我的占位符变量名可能需要改进)使用
相关问题 更多 >
编程相关推荐