2016-09-18 18 views
-2

スペースなしの文字列があります。2つの単語の間の文字列を抽出する正規表現

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

私はATGTAG|TGA|TAA のいずれかで終わる(終わりを含めるべきではありません) の間の文字列を抽出する必要があります。文字列から文字列を抽出するには

ATGAGCおよび ATGCCCCGCTAA正規表現を使用する方法私は期待どおりに動作しません

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

を試してみましたが、何

。正規表現次

+1

どのような結果が得られますか? – Soviut

+4

私はこの同じ質問が毎年この時間の周りに尋ねられるように感じます....例えば[ここ](ここでは)(http://stackoverflow.com/q/18731894/)と[ここ](http://stackoverflow.com/ q/16260794 /)と[here](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'] 

注意。

('ATGCCCCGC',) 
0
import re 

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

print results.groups(0) 

結果は、これは語尾が含まれていないことを考えると、動作します:

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

?:はパターンが結果にキャプチャされないことを意味します。

...:正確に3文字を指定します。代替は.{3}またはより限定的な場合は[ACTG]{3}

*?:最小一致を意味します。これがなければ、最長一致が得られるでしょう。

0

関連する問題