2016-09-18 204 views
-2

我有一个没有空格的字符串。在两个单词之间提取字符串的正则表达式

ATG AGC TAA CTC AGG TGA TGG GGA ATG CCC CGC TAA 

我需要要么TAG|TGA|TAA (不应该包括结束) ATG和结束之间提取字符串。我如何从字符串中提取

ATGAGCATGCCCCGCTAA使用正则表达式。

我曾尝试

pattern = re.compile(r'(?=(ATG(?:...)*?)(?=TAG|TGA|TAA))') 

预期这是行不通的。

+1

你会得到什么结果? – Soviut

+4

我觉得每年这个时候都会问到这个问题......例如[here](http://stackoverflow.com/q/18731894/)和[here](http://stackoverflow.com/ q/16260794 /)和[这里](http://stackoverflow.com/q/19761908/)和[这里](http://stackoverflow.com/q/31757876)和.... – Dan

+2

为什么'ATGCCCCGCTAA'是否包含'TAA'?而“ATGAGC”不? – Kasramvd

回答

1

使用正则表达式如下:

In [14]: regex = re.compile(r'(ATG.*?)(?:TAG|TGA|TAA)') 

In [15]: regex.findall(s) 
Out[15]: ['ATGAGC', 'ATGGGGAATGCCCCGC'] 

需要注意的是这些比赛不包含尾随。

0
import re 

pattern = re.compile(r'(ATG[A-Z]+)(?:TAG|TGA|TAA)') 
results = pattern.search('ATGCCCCGCTAA') 

print results.groups(0) 

结果

('ATGCCCCGC',) 
0

这工作,因为结局不包括:

>>> re.findall(r'(ATG(?:...)*?)(?:TAG|TGA|TAA)', seq) 
['ATGAGC', 'ATGCCCCGC'] 

?:意味着图案不会在结果被捕获。

...:指定正好三个字符。替代方案是.{3}或更具限制性的案例[ACTG]{3}

*?:暗示最小匹配。没有这个,就会获得最长的比赛。

相关问题