我有一个序列
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
也匹配。为什么没有报道?
答案 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演示文稿中右侧的捕获。