Подтвердить что ты не робот

Замена подстроки строки на Python

Я хотел бы получить несколько мнений о том, как заменить подстроку строки другим текстом. Вот пример:

У меня есть строка, а, которая может быть чем-то вроде "Привет, мое имя - это имя". У меня также есть другая строка, b, которую я хочу вставить в строку a вместо своей подстроки '$ name'.

Я предполагаю, что это было бы проще всего, если сменная переменная указывается каким-то образом. Я использовал знак доллара, но это может быть строка между фигурными фигурными скобками или тем, что, по вашему мнению, будет работать лучше всего.

Решение: Вот как я решил это сделать:

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')
4b9b3361

Ответ 1

Вот наиболее распространенные способы сделать это:

>>> 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.

процентный стиль будет знаком многим людям, поступающим с других языков программирования. Некоторые люди считают, что этот стиль подвержен ошибкам из-за конечных "s" в %(name)s, потому что% -оператор имеет тот же приоритет, что и умножение, и потому, что поведение применяемых аргументов зависит от их типа данных (кортежи и dicts получают специальную обработку). Этот стиль поддерживается в Python с самого начала.

стиль фигурной скобки поддерживается только в Python 2.6 или новее. Это самый гибкий стиль (предоставляющий богатый набор управляющих символов и позволяющий объектам реализовывать пользовательские форматирования).

Ответ 2

Существует несколько способов сделать это, тем чаще будет использоваться оборудование, уже предоставленное строками. Это означает использование оператора % или, еще лучше, нового и рекомендуемого 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), если замены сложнее.

Ответ 3

На самом деле это уже реализовано в модуле string.Template.

Ответ 4

Оформить функцию 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".

Ответ 5

Вы можете сделать что-то вроде:

"My name is {name}".format(name="Name")

Он поддерживался изначально в python, как вы можете видеть здесь:

http://www.python.org/dev/peps/pep-3101/

Ответ 6

Вы также можете использовать форматирование с%, но .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