Замена подстроки в строке в Python
Я хотел бы получить несколько мнений о том, как лучше всего заменить подстроку строки другим текстом. Вот пример:
У меня есть строка, a, которая может быть чем-то вроде "Привет, меня зовут $name". У меня также есть другая строка, b, которую я хочу вставить в строку a вместо ее подстроки "$name".
Я предполагаю, что было бы проще, если сменная переменная будет указана каким-то образом. Я использовал знак доллара, но это может быть строка между curly брекеты или что вы чувствуете, будет работать лучше.
устранение: Вот как я решил это сделать:
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 = '')
6 ответов
вот наиболее распространенные способы сделать это:
>>> 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
подход с использованием строку.Шаблон легко учиться и должны быть знакомы с пользователями bash. Соответствующе для подвергать действию к пользователям. Этот стиль стал доступен в Python 2.4.
на процентов-стиль будет знаком многим людям, пришедшим из других языков программирования. Некоторые люди считают, что этот стиль подвержен ошибкам из-за трейлинга "s" в %(name)s
, потому что %- оператор имеет тот же приоритет, что и умножение, и поскольку поведение применяемых аргументов зависит от их типа данных (кортежи и дикты получают специальную обработку). Этот стиль поддерживается в Python с самого начала.
на фигурная скобка стиль поддерживается только в Python 2.6 или более поздней версии. Это самый гибкий стиль (обеспечивающий богатый набор управляющих символов и позволяющий объектам реализовывать пользовательские форматеры).
есть несколько способов сделать это, более часто используемые будут через средства, уже предоставленные строками. Это означает использование %
оператор, или еще лучше, более новый и рекомендуемый 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
module) если замены более сложны.
проверка функции replace () в python. Вот ссылка:
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"
.
вы можете сделать что-то вроде:
"My name is {name}".format(name="Name")
он поддерживается изначально в python, как вы можете видеть здесь:
вы также можете использовать форматирование с % но .формат () считается более современным.
>>> "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