2017-08-05 3 views
1

私は私のコードとしてこれを持っている:正規表現で数値を含む変数を使用するにはどうすればよいですか?

motifSearch = '' 
intMin = 15 
intMax = 21 
intlen = intMax - intMin 
SD = "TTGACA" 
PBN = "TATAAT" 

fastaFile = open('testseq.fsa', 'r') 
for line in fastaFile: 
    if deviation == 0: 
     motSearch = re.search(SD+'([A-Z|a-z]){'+intMin,intMax+'}('+PBN+')', line) 
     if motSearch is not None: 
      motifSearch = motSearch.group(0) 
print(motifSearch) 

Iは、SDである第1の信号を見つけ、次に文字の{関数intmin、関数intmax}番号をジャンプし、次いで第二の信号PBNを見つけなければなりません。私がこれを印刷すると、私は次のようになります。 "TypeError:int型のオブジェクトをstrに暗黙的に変換できません"。 私は何が間違っていますか?

答えて

4

文字列の書式設定を使用します。

regex = '{}([A-Z|a-z]){{},{}}({})'.format(SD, intMin, intMax, PBN) 

motSearch = re.search(regex, line) 

あなたのリユース変数場合や、また、順序をこのように指定することができ、より読みやすい何かをしたい...

regex = '{0}([A-Z|a-z]){{1},{2}}({3})'.format(SD, intMin, intMax, PBN) 

文字列の別の例は、問題(ではないの周りを取得する方法がわからをフォーマットアドレス文字列に書式あなたがそれらをエスケープすることができないように{}を使用する場合)

regex = '%s([A-Z|a-z]){%s,%s}(%s)' % (SD, intMin, intMax, PBN) 
+0

ありがとう!私はあなたの最後の解決策を使用しました。 motSearch = re.search( "{0}([AZ | az]){{1}、{2}}({0})は、フォーマット文字列で" (SD、intMin、intMax、PBN) しかし、それはなぜそう言われているのか分かりませんか? - 簡単な質問かもしれませんが、私はプログラミングにおいて非常に新しいです。 –

+0

あなたが持っているPythonインタプリタのエラーを解決します。文字列フォーマットの他のメソッドは動作しますが、更新されたバージョンが私のためであるかどうかは分かりません。 –

+1

ありがとうございます。 –

関連する問題