用python查找子字符串的所有发生项,用max distan分隔

2024-10-04 11:25:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用python匹配子字符串的所有出现。你知道吗

我找到了this,但我想匹配一个子串的发生数,该子串最多相隔一段距离(例如最大值为6)。如果我有绳子

AATCGTGCCGTGTGCCCCAAAATGAACGCGCCGCTGTG

如果两个TG之间最多相隔6个字符,我想得到TG的所有位置。 在上面的例子中,我想得到[5, 10, 12, 34, 36]。我不想要中间的TG位置,因为它离任何一个“组”(10个字符)都太远了。你知道吗

我试过这个:

(?=TG(?:.+){1,6}?)

但它不起作用。你知道吗

编辑

我创建了regex,它返回所有我想要的位置,除了最后一个。你知道吗

(?=TG.{0,6}TG)

如果我使用上面的例子,返回的位置用|标记

AATCG|TGCCG|TGTGCCCCAAAATGAACGCGCCGC|TGTG

但我也希望得到标有\的位置

AATCG|TGCCG|TG\TGCCCCAAAATGAACGCGCCGC|TG\TG

我知道为什么它不起作用,因为它匹配所有TG,后面是0-6个随机字符和一个额外的TG,但我不知道应该添加什么使它起作用。你知道吗


Tags: 字符串标记编辑tgthis例子regex子串
2条回答

如果使用正则表达式,我认为这应该有效。
位置必须从捕获组1的位置获得。你知道吗

注意-我认为你的立场是无效的。

(?:^.*?|(?<=TG).{0,4})(TG)

编辑:

你也可以这样做,开始一组新的TG

使用\K-无捕获组:(?:(?<=TG).{0,4}\KTG|.*?\KTG(?=.{0,4}TG))
格式化:

 (?:
      (?<= TG )
      .{0,4} 
      \K 
      TG
   |  
      .*? 
      \K 
      TG
      (?= .{0,4} TG )
 )

无分支重置-2个捕获组:(?:(?<=TG).{0,4}(TG)|.*?(TG)(?=.{0,4}TG))
格式化:

 (?:
      (?<= TG )
      .{0,4} 
      ( TG )                        # (1)
   |  
      .*? 
      ( TG )                        # (2)
      (?= .{0,4} TG )
 )

带分支重置-1捕获组:(?|(?<=TG).{0,4}(TG)|.*?(TG)(?=.{0,4}TG))

格式化:

 (?|
      (?<= TG )
      .{0,4} 
      ( TG )                        # (1)
   |  
      .*? 
      ( TG )                        # (1)
      (?= .{0,4} TG )
 )

您可以这样做,首先查找所有发生的事件,然后检查索引之间的距离:

text = AATCGTGCCGTGTGCCCCAAAATGAACGCGCCGCTGTG
positions = []
index = 0

# Get all positions
while index < len(text):
    index = text.find('TG', index)
    positions.append(index)
    index += 2 # +2 because len('TG') == 2

# Filter out positions where distance are maximum 6
for i in range(1,len(positions)):
    if(((positions[i] - positions[i-1]) > 6) and ((positions[i+1] - positions[i]) > 6)): # check distance in both directions
        del positions[i]

# print resulting list
print positions

我还没检查过,但应该可以。你知道吗

相关问题 更多 >