在两个已定义的变量之间提取文本

时间:2017-05-31 17:00:02

标签: python

我有以下代码:

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

我的最后一行代码有问题。我想在名为primerultimo的两个变量之间提取文本。问题是正则表达式将这些单词用作字符串,而不是变量。所以我尝试了以下内容:

fragmento = str(re.findall((r'%s(.*?)%s' % primer, ultimo), texto_original, re.DOTALL))

这会引发以下错误:

TypeError: not enough arguments for format string

我该如何解决这个问题?

2 个答案:

答案 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))