替换%后跟一个字符串中的数字

时间:2014-12-18 18:37:31

标签: python arrays python-2.7 python-3.x formatting

我正在进行一个类赋值,它要求我将%后跟一个数字替换为相应的位置参数(如果有的话,假设只给出了这样的数字和必需的参数)。我一直试图解决这个问题几个小时没有用。搜索Stack Overflow和web,但之前提出的问题只能用一些很容易的东西替换整数。

例: 格式化(“Exodus%0”,“Moses”) - >应该返回“Exodus Moses”

格式化(“Exodus%0和%1”,“Kings”,“Gods”) - >应该归还“Exodus Kings and Gods”

格式化(“出埃及记%1和%0”,“国王”,“众神”) - >应该回归“出埃及神和国王”

从它的外观来看,我认为函数格式化原型将是

def formatting(inputstring, *args):

到目前为止我尝试过的事情

1.for循环以天真地将%number替换为其对应的参数

for length in len(args):
    temp=temp.replace("%length","arg[length]")        

当然这不会起作用,因为它们是字符串而不是整数

2.使用inputstring.format()返回所需的字符串。   问题是由不同的args长度引起的 例如:

if len(args) == 1:    
    return inputstring.replace("%0",args[0])
if len(args) == 2:
    inputstring = inputstring.replace("%0",args[0])
    return inputstring.replace("%1",args[1])

很容易就行了!但感觉不对,很多论点都很麻烦   尝试在一个循环中做这个没有成功

请帮忙 谢谢!

1 个答案:

答案 0 :(得分:1)

你几乎在这里:

for length in xrange(len(args)):
    temp = temp.replace("%length","arg[length]")

考虑:

>>> s = "Hello %length there %0 man"
>>> length = 0
>>> args = ["something"]

如果你做了替换,你会发生错误的事情:

>>> s.replace("%length", "args[length]")
'Hello args[length] there %0 man'

你想最终这样做:

>>> s.replace("%0", "something")
'Hello %length there something man'

怎么做?对于给定的索引,您必须构造字符串"%",后跟索引,然后从args中获取该值:

>>> i = 0
>>> "%" + str(i)
'%0'
>>> args[i]
'something'    
>>> s.replace("%" + str(i), args[i])
'Hello %length there something man'

所以你的循环必须如下所示:

>>> for i in xrange(len(args)):
        temp = temp.replace("%" + str(i), args[i])

或者,更热门的是,您可以使用enumerate,它允许您遍历列表并同时获取索引:

>>> for i, arg in enumerate(args):
        temp = temp.replace("%" + str(i), arg)