用于查找所有匹配项的python正则表达式

时间:2015-03-04 18:05:12

标签: python regex

我有一个序列

seq = 'CCGATGACCTCACAGCCGCCTCCTGCCTTGAGGAAAGGAACTGCAATTCC'

我试图获得长度为23bp的序列,以NGG结尾,其中N = A或C或T或G`

我使用p = re.compile('([ACGT]{21}GG)'),当我说

for m in p.finditer(seq):
      print m.group()

我只获得CACAGCCGCCTCCTGCCTTGAGG

但显然CCGCCTCCTGCCTTGAGGAAAGG也匹配。为什么没有报道?

1 个答案:

答案 0 :(得分:5)

将你的正则表达式放在一个先行断言中,以便进行重叠匹配。你的正则表达式无法匹配这两个字符串,因为一个匹配包含另一个匹配。默认情况下,正则表达式不会重叠匹配。您需要将模式放在lookarounds中以便捕获重叠匹配。

(?=([ACGT]{21}GG))

<强>代码:

>>> seq = 'CCGATGACCTCACAGCCGCCTCCTGCCTTGAGGAAAGGAACTGCAATTCC'
>>> p = re.compile(r'(?=([ACGT]{21}GG))')
>>> for m in p.finditer(seq):
        print m.group(1)


CACAGCCGCCTCCTGCCTTGAGG
CCGCCTCCTGCCTTGAGGAAAGG

请参阅this演示文稿中右侧的捕获。