使用.format在regex findall对象中使用变量。python

使用.format在regex findall对象中使用变量。python,regex,string,variables,format,findall,Regex,String,Variables,Format,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)…

我在这里看到了一些例子,但没有回答我的问题:

我试图用一个变量来代替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)
没有错误,但当我向下看时,它不起作用


如何让这个变量在正则表达式中工作?

Python抱怨字符串中有其他
{
}
未用于格式,它不知道如何区分它们之间的区别。在格式字符串中,大括号通过加倍来转义

您还需要转义
值中的任何正则表达式字符

所以也许:

ORF = re.findall(
    r'ATG(?:(?!TAA|TAG|TGA)…){{{},}}?(?:TAA|TAG|TGA)'
        .format(re.escape(value)),
    seq)

但是,在这种情况下,我怀疑有人会责怪您使用了
%
-格式或良好的旧字符串连接:)

您在第二次尝试中没有使用.format。不过,通常需要在字符串中引用格式说明符字符。只使用字符串连接通常更容易(即,
+
)。@thebjorn我以前尝试过添加它,就像我在为类似问题提供的链接中所做的那样。我最终使用了字符串连接,但我想稍后练习.format。不错的个人资料图片顺便说一句,vaporeon是我的最爱