/ / Použitie .format na použitie premennej v regex findall objekte. Python - regex, reťazec, premenné, formát, findall

Použitie .format na použitie premennej v objekte regex findall. Python - regex, reťazec, premenné, formát, findall

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ď č. 1

Python 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 :)