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

2024-06-28 19:19:01 发布

您现在位置: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的两个变量之间的文本。问题是regex将这些单词用作字符串,而不是变量。所以我尝试了以下方法:

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

这会引发以下错误:

TypeError: not enough arguments for format string

我该怎么解决这个问题


Tags: 代码importresooriginalstrartprimer
2条回答

解释器不清楚哪些参数指向findall,哪些参数用于格式化字符串:

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

docs(我的重点)

If format requires a single argument, values may be a single non-tuple object. [5] Otherwise, values must be a tuple with exactly the number of items specified by the format string, or a single mapping object (for example, a dictionary)

因此,您只需将变量用括号括起来,就像这样,以匹配两个%s格式参数

(r'%s(.*?)%s' % ( primer, ultimo ) )
                ^                ^

相关问题 更多 >