だから、私は正規表現の節を作成しようとしているが、 "ACTG" 有効なものとして受け入れることができます。何か他の "ACTG" その他の文字は無効です。
最終的に、私はwhileループから取り除きます。それはテスト目的のためです。今、私はそれがa、c、t、またはgで始まる限り、それが有効であると信じています。
正規表現にマッチよりも適している機能がありますか?
import re
while (True):
DnaString = str(input("enter your polynucleotide chain code hooblah"))
if (re.match("([ACTG]+[ACTG]*)", DnaString, flags=0)):
#if re.search("^ACTG", DnaString) != -1:
print ("valid chain.")
else: #(re.search("^[ACTG]+[ACTG]*$", DnaString) == -1):
print("invalid chain, please check your input.")
if (DnaString.find("end") != -1):
print("ohokaybye.")
break
回答:
回答№1は2なぜではない
if all(c in "ACGT" for c in DnaString):
# Do success
else:
# Do failure
回答№2の場合は1
あなたの問題は、文字列内のどこにでもACTG文字を検索しているだけで、他に何も許可されていないことを指定しているということです。 正規表現を次のように変更すると ^[ACTG]+$
期待どおりに動作します。 ^と$文字は、それぞれ行の始まりと終わりを意味するアンカーです。
したがって、上の正規表現は、4つの文字のうちの1つ以上を含む文字列と一致し、その前後に他の文字を許可しません。
回答№3の場合は0
内部的に許容可能な文字を繰り返すことを許可した場合、これはあなたが望むものであるかもしれません:
"[A|C|T|G]{4}"