Uvidel som tu niekoľko príkladov, ale neodpovedal na moju otázku: Python Regular Expression findall s premennou
Snažím sa použiť premennú namiesto 9, ale nedokážem to prísť na to
value = 9
ORF = re.findall(r"ATG(?:(?!TAA|TAG|TGA)…){ value ,}?(?:TAA|TAG|TGA)",seq)
#obviously doesn"t work or i wouldn"t have made this post
Skúsil som:
value = 9
ORF = re.findall(r"ATG(?:(?!TAA|TAG|TGA)…){ {} ,}?(?:TAA|TAG|TGA)".format(value),seq)
ale dostal som chybu:
ValueError: Single "}" encountered in format string
potom som sa snažil:
value = r"{}".format(9)
ORF = re.findall(r"ATG(?:(?!TAA|TAG|TGA)...){value,}?(?:TAA|TAG|TGA)",seq)
a nedostal som žiadnu chybu, ale nefungovalo to, keď som sa pozrel po prúde
Ako môžem získať túto premennú, aby pracovala v regulárnom výraze?
odpovede:
1 pre odpoveď č. 1Python si sťažuje, že existujú aj iné {
a }
vo vašom reťazci, ktorý sa nepoužíva pre formát, a nevie, ako rozlíšiť rozdiel. Vo formátovacom reťazci sú rovnátka uniknuté zdvojnásobením.
Tiež musíte uniknúť akýmkoľvek znakom regexu vo vašom value
.
Možno teda:
ORF = re.findall(
r"ATG(?:(?!TAA|TAG|TGA)…){{{},}}?(?:TAA|TAG|TGA)"
.format(re.escape(value)),
seq)
V prípade, ako je tento, však pochybujem, že by vás niekto zneužil %
- namiesto toho formátovanie alebo dobrá zreťazenie reťazcov :)