Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中使用正则表达式查找字符串中以给定子字符串开头和结尾的所有字符串_Python_Regex - Fatal编程技术网

在Python中使用正则表达式查找字符串中以给定子字符串开头和结尾的所有字符串

在Python中使用正则表达式查找字符串中以给定子字符串开头和结尾的所有字符串,python,regex,Python,Regex,我已经给了一根绳子 ATGCCAGGCTTATTATA 我必须找出字符串中所有的子字符串,以ATG开头,以TAA,TAG,TGA结尾 以下是我正在做的: seq=“atgccaggtagcttatta” 模式=重新编译(r)(ATG[ACGT]*(TAG | TAA | TGA))) 对于re.FindItemer中的匹配(模式,序号): 编码=匹配。组(1) 打印(编码) 此代码为我提供了以下输出: ATGCCAGGCTTATTATA 但实际产出应为: ATGCCAGGCTATTATTAA,

我已经给了一根绳子

ATGCCAGGCTTATTATA

我必须找出字符串中所有的子字符串,以ATG开头,以TAA,TAG,TGA结尾

以下是我正在做的:

seq=“atgccaggtagcttatta”
模式=重新编译(r)(ATG[ACGT]*(TAG | TAA | TGA)))
对于re.FindItemer中的匹配(模式,序号):
编码=匹配。组(1)
打印(编码)
此代码为我提供了以下输出:

ATGCCAGGCTTATTATA

但实际产出应为:

ATGCCAGGCTATTATTAA,ATGCCAGGCTAG


我应该在代码中更改什么?

r”(ATG[ACGT]*(TAG | TAA | TGA))“
中,
*
操作符是“贪婪的”。使用非贪婪修饰符,如
r“(ATG[ACGT]*?(TAG | TAA | TGA))”
,告诉regexp使用最短的匹配字符串,而不是最长的匹配字符串。

tl;dr:无法对此使用正则表达式


问题不在于贪婪/不贪婪

问题也不是重叠匹配:有一个解决方案()

OP问题的真正问题是,正则表达式不是为具有相同开始的比赛而设计的。正则表达式执行线性搜索并在第一次匹配时停止。这就是它速度快的原因之一。但是,这会阻止正则表达式支持从同一字符开始的多个重叠匹配

更多信息


正则表达式不是模式匹配的全部。它的名字是:正则表达式都是关于单解释符号序列的,而DNA往往不适合这种模式。

我尝试了这个,但这只给了我最短的字符串。对于你当前的例子,你可以使用2个捕获组,或者得到所有的变体,我认为这可以做到
(?=(ATG[ATCG]*(?:T(?:A[AG]| GA))(ATG[ATCG]*(?:T(?:A[AG]| GA))
否此ATGCCAGGATGTTATTTGTAG字符串失败,输出应为:ATGCCAGGATGTTATTTGTAG和ATGTTATTGTTAG