我想就用一些其他文本替换字符串的子串的最佳方法得到一些意见。这是一个例子:
我有一个字符串,a,可能类似于“Hello my name is $ name”。我还有另一个字符串b,我想在其子字符串'$ name'的位置插入字符串a。
我认为如果以某种方式指示可替换变量将是最简单的。我使用了一个美元符号,但它可以是花括号之间的字符串,也可以是你觉得效果最好的字符串。
解决方案: 以下是我决定这样做的方法:
from string import Template
message = 'You replied to $percentageReplied of your message. ' +
'You earned $moneyMade.'
template = Template(message)
print template.safe_substitute(
percentageReplied = '15%',
moneyMade = '$20')
答案 0 :(得分:55)
以下是最常用的方法:
>>> import string
>>> t = string.Template("Hello my name is $name")
>>> print t.substitute(name='Guido')
Hello my name is Guido
>>> t = "Hello my name is %(name)s"
>>> print t % dict(name='Tim')
Hello my name is Tim
>>> t = "Hello my name is {name}"
>>> print t.format(name='Barry')
Hello my name is Barry
使用string.Template的方法很容易学习,并且对于bash用户应该很熟悉。它适合暴露给最终用户。这种风格在Python 2.4中可用。
许多来自其他编程语言的人都会熟悉percent-style。有些人发现这种风格容易出错,因为%(name)s
中的尾随“s”,因为%-operator具有与乘法相同的优先级,并且因为应用参数的行为取决于它们的数据类型(元组和dicts得到特殊处理)。从一开始就在Python中支持这种风格。
仅在Python 2.6或更高版本中支持curly-bracket style。它是最灵活的样式(提供丰富的控制字符集,允许对象实现自定义格式化程序)。
答案 1 :(得分:11)
有很多方法可以做到这一点,更常用的方法是通过字符串提供的设施。这意味着使用%
运算符,或者更好的是,使用较新且推荐的str.format()
。
示例:
a = "Hello my name is {name}"
result = a.format(name=b)
或更简单
result = "Hello my name is {name}".format(name=b)
您还可以使用位置参数:
result = "Hello my name is {}, says {}".format(name, speaker)
或使用显式索引:
result = "Hello my name is {0}, says {1}".format(name, speaker)
允许您更改字符串中字段的顺序而不更改对format()
的调用:
result = "{1} says: 'Hello my name is {0}'".format(name, speaker)
格式非常强大。您可以使用它来决定制作字段的宽度,如何编写数字以及排序的其他格式,具体取决于您在括号内写的内容。
如果替换更复杂,您还可以使用str.replace()
函数或正则表达式(来自re
模块)。
答案 2 :(得分:9)
在python中检查replace()函数。这是一个链接:
http://www.tutorialspoint.com/python/string_replace.htm
在尝试替换您指定的某些文本时,这应该很有用。例如,在链接中,他们会向您显示:
str = "this is string example....wow!!! this is really string"
print str.replace("is", "was")
对于每个单词"is"
,它会将其替换为单词"was"
。
答案 3 :(得分:8)
实际上这已经在模块string.Template
中实现。
答案 4 :(得分:5)
您可以执行以下操作:
"My name is {name}".format(name="Name")
在python中本地支持它,你可以在这里看到:
答案 5 :(得分:2)
您也可以使用%格式,但.format()被认为更现代。
>>> "Your name is %(name)s. age: %(age)i" % {'name' : 'tom', 'age': 3}
'Your name is tom'
但它也支持一些类型检查,如通常的%格式所知:
>>> '%(x)i' % {'x': 'string'}
Traceback (most recent call last):
File "<pyshell#40>", line 1, in <module>
'%(x)i' % {'x': 'string'}
TypeError: %d format: a number is required, not str