在Python中使用regex查找字符串中以给定子字符串开头和结尾的所有字符串

我给了一个字符串

  

ATGCCAGGCTAGCTTATTTAA

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

这是我在做什么:

seq="ATGCCAGGCTAGCTTATTTAA"
pattern = re.compile(r"(ATG[ACGT]*(TAG|TAA|TGA))")
for match in re.finditer(pattern,seq):
    coding = match.group(1)
    print(coding)

这段代码给了我输出:

  

ATGCCAGGCTAGCTTATTTAA

但是实际输出应该是:

  

ATGCCAGGCTAGCTTATTTAA,ATGCCAGGCTAG

我应该更改我的代码吗?

liu2820168long 回答:在Python中使用regex查找字符串中以给定子字符串开头和结尾的所有字符串

library(dplyr) library(purrr) results <- map(results,~ .x %>% mutate_at(vars(ends_with("1")),list(new = ~ rse(.,y = preds)))) 中,r"(ATG[ACGT]*(TAG|TAA|TGA))"运算符为“贪心”。使用非贪婪修饰符,例如*,告诉正则表达式采用最短匹配的字符串,而不是最长的。

,

tl; dr:不能为此使用正则表达式


问题不是贪婪/非贪婪。

问题也不在于匹配重叠:有一种解决方法(How to find overlapping matches with a regexp?

OP问题的真正问题是,REGEX并非为起点相同的比赛而设计。正则表达式执行线性搜索,并在第一个匹配项处停止。这就是为什么它很快的原因之一。但是,这会阻止REGEX支持从同一字符开始的多个重叠匹配。

请参见

Regex including overlapping matches with same start

了解更多信息。

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

本文链接:https://www.f2er.com/3150057.html

大家都在问