Я бачив деякі приклади тут, але це не відповідало моєму питанню: Регулярний вираз Python findall з змінною
Я намагаюся використовувати змінну замість 9, але я не можу це з'ясувати
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
Я намагався:
value = 9
ORF = re.findall(r"ATG(?:(?!TAA|TAG|TGA)…){ {} ,}?(?:TAA|TAG|TGA)".format(value),seq)
але отримала помилку:
ValueError: Single "}" encountered in format string
тоді я спробував:
value = r"{}".format(9)
ORF = re.findall(r"ATG(?:(?!TAA|TAG|TGA)...){value,}?(?:TAA|TAG|TGA)",seq)
і не помилився, але він не працював, коли я дивився вниз по течії
Як я можу отримати цю змінну для роботи в моєму регулярному виразі?
Відповіді:
1 для відповіді № 1Python скаржиться, що є й інші {
і }
у вашому рядку, який не використовується для форматування, і він не знає, як визначити різницю. У рядку формату фігурні дужки вислизаються шляхом подвоєння їх.
Вам також потрібно уникнути будь-яких символів регулярних виразів у вашому value
.
Так, можливо:
ORF = re.findall(
r"ATG(?:(?!TAA|TAG|TGA)…){{{},}}?(?:TAA|TAG|TGA)"
.format(re.escape(value)),
seq)
Однак у такому випадку я сумніваюся, що хтось звинуватив вас у використанні %
форматування або хороша стара струнка concatenation замість :)