用 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
中的相应字符串。遍历所有要替换的匹配项。
我目前正在尝试用字符串中的第 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
中的相应字符串。遍历所有要替换的匹配项。