任务是找到组中最长的序列
例如,给定的DNA序列:"AGATCAGATCTTTTTTCTAATGTCTAGGATATATCAGATCAGATCAGATCAGATCAGATC"
它有7次发生AGATC(AGATC)
匹配所有发生的事件。
是否可以编写只捕获最长序列的正则表达式,即给定文本中的AGATCAGATCAGATCAGATCAGATC
?
如果仅使用正则表达式无法实现这一点,那么如何在python中迭代每个序列(即第一个序列是AGATCAGATC
,第二个序列是AGATCAGATCAGATCAGATCAGATC
等等)
核心问题是,“是否有可能编写只捕获最长序列的正则表达式?”答案是“是”:
Regex demo<“\(ツ) /'>;Python demo
Python的正则表达式引擎执行以下操作
对于上面的字符串
s
,将首先匹配AGATC
,但负前瞻将发现AGATC
是AGATCAGATC
的第一部分,因此将拒绝临时匹配。然后AGATCAGATC
将被匹配,但负前瞻将发现AGATCAGATC
是AGATCAGATCAGATC
的第一部分因此,这个临时匹配也将被拒绝。接下来,将匹配并接受AGATCAGATCAGATC
,因为反向前瞻将不会在字符串的后面找到该匹配。(re.findall
与re.search
不同,它还将匹配字符串末尾的AGATCAGATC
。)如果使用了
re.findall
,则在最长的匹配之后可能会有多个匹配(请参见regex演示链接中的最后一个测试字符串),但匹配的长度从第一个到最后一个都不会减少。因此,使用re.search
获得的第一个匹配是最长的匹配使用:
说明:
非捕获组
(?:AGATC)+
+
量词-尽可能多地在一次和无限次之间匹配李>AGATC
按字面意思匹配字符AGATC(区分大小写)结果:
您可以测试regex^{}
使用
re.finditer()
迭代所有匹配项。然后使用max()
和键函数查找最长的。使其成为一个函数,以便可以使用不同的组相关问题 更多 >
编程相关推荐