我有以下代码:
import re
p = 1
while p < 10 and p>= 1:
p = p+ 1
primer = ("Artículo %so" % (p-1))
ultimo = ("Artículo %so" % (p))
with open("LISR.txt") as ley:
texto_original = ley.read()
fragmento = str(re.findall((r'primer(.*?)ultimo', texto_original, re.DOTALL))
我的最后一行代码有问题。我想在名为primer
和ultimo
的两个变量之间提取文本。问题是正则表达式将这些单词用作字符串,而不是变量。所以我尝试了以下内容:
fragmento = str(re.findall((r'%s(.*?)%s' % primer, ultimo), texto_original, re.DOTALL))
这会引发以下错误:
TypeError: not enough arguments for format string
我该如何解决这个问题?
答案 0 :(得分:1)
来自docs(强调我的)
如果
format
需要单个参数,values
可能是单个非元组对象。 [5]否则,values
必须是具有format
字符串指定的项目数的元组,或者是单个映射对象(例如,字典)< / p>
所以你只需要将变量包装在括号中,就像这样,以匹配你的两个%s
格式化参数
(r'%s(.*?)%s' % ( primer, ultimo ) )
^ ^
答案 1 :(得分:0)
解释器对哪些参数转到findall
以及哪些参数用于格式化字符串感到困惑:
fragmento = str(re.findall((r'%s(.*?)%s' % (primer, ultimo)), texto_original, re.DOTALL))