用 python 中的 args 中的第 X 个参数替换 %X 的所有实例

replacing all instances of %X with Xth argument in args in python

我目前正在尝试用字符串中的第 x 个参数替换出现的数字 x。这是我的代码:

def simple_format(format, *args):
    res = format.replace("%", "")
    for x in res:
        if (isinstance(x, int)):
            res = res.replace(x, args(x))
     return res

第一个替换用于删除字符串中出现的%,然后检查遇到的变量是否为数字,如果是,则将其替换为参数。

例如, simple_format("hello %0", "world", "Ben") 应该 return "hello world"。没有达到预期的输出。错误是什么?有没有办法使用替换方法来做到这一点? 提前致谢。

您当前的方法有问题,因为 x 将始终是类型 str,因此 isinstance 检查将始终为 False。另外,即使您修复了该问题,您的代码也会将每个 单个 数字替换为其在 args 中的索引(只要您还将 args(x) 更改为 args[x]).

我会使用正则表达式替换将您的字符串转换为正确的格式文字。然后你可以使用字符串格式来插入参数。

import re
def simple_format(format, *args):
    new = re.sub(r"%(\d+)", r"{}", format)
    return new.format(*args)

print(simple_format("hello %0", "world", "Ben"))
# hello world

这是一个更基本的 IMO 方法,可能更具可读性:

import re

s = 'hello %0, how %2 do you come to %1?'

replacements = ['world','stack overflow','often']

for match in re.findall(r'\%[0-9]+', s):
    s = re.sub(match, replacements[int(re.sub(r'\%','',match))], s)

输出:

'hello world, how often do you come to stack overflow?'

解释:

re.findall(r'\%[0-9]+', s) 查找字符串 s

中的所有 %0%2%1

对于每个匹配项,使用 re.sub() 替换 replacements 中的相应字符串。遍历所有要替换的匹配项。