使用.format在regex findall对象中使用变量。python
我在这里看到了一些例子,但没有回答我的问题: 我试图用一个变量来代替9,但我似乎无法理解它使用.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)…
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是我的最爱