- Изменение строки в Python – метод replace
- Что делает метод
- Применение replace для замены нескольких значений
- С помощью словаря
- Вариант со списками
- Другие типы Python и метод replace
- Python replace string with dictionary
- # Table of Contents
- # Replace words in a String using a Dictionary in Python
- # Converting the keys or values of the dictionary to lowercase
- # Replace words in a String using a Dictionary with re.sub()
- # Additional Resources
- Replace words in a string using dictionary in Python
- Frequently Asked:
- Using str.replace() function
- Using Regex
- Related posts:
- String replacement using dictionaries
Изменение строки в Python – метод replace
Строки — это важный тип данных, который есть почти в любом языке программирования. Он служит для создания, изменения и сохранения текстовой информации, а также используется при реализации некоторых задач, связанных с числами.
Python даёт программисту много инструментов для работы со строками, в том числе и метод replace() .
Что делает метод
Слово replace имеет дословный перевод «заменять», так что название метода точно описывает его назначение. С помощью replace можно заменить часть строки или её всю на другую строку.
Синтаксис метода выглядит так:
str.replace(old_str, new_str[, count])
В качестве аргументов в метод передаются:
- old_str – часть исходной строки, которую необходимо заменить.
- new_str – строка, на которую заменяют исходную строку ( old_str ).
- count – определяет количество вхождений подстроки, которые необходимо заменить.
Здесь count – не обязательный параметр. Если его не указывать, то будут заменены все вхождения подстрок на новые.
В качестве str используется исходная строка (тип данных string).
Таким образом, метод replace позволяет гибко изменять только необходимые части строки str , работа метода продемонстрирована в следующих примерах:
my_str = "one dog, one cat, one rabbit" #Заменяем все вхождения "one" в строке a = my_str.replace("one", "two") print(a) # Выведет two dog, two cat, two rabbit #Заменяем первое вхождение "one" в строке b = my_str.replace("one", "two", 1) print(b) # Выведет two dog, one cat, one rabbit #Заменяем первые два вхождения "one" в строке c = my_str.replace("one", "two", 2) print(c) # Выведет two dog, two cat, one rabbit
Важно помнить, что строки — это неизменяемые последовательности. Поэтому метод replace не заменяет отдельные символы в целевой строке, вместо этого он создает её копию с нужными изменениями. Это важная особенность языка Python, которую должен знать каждый программист.
Это не очевидно, с помощью метода replace можно заменить сразу несколько значений, например все элементы списка:
str_list = ["кот", "собака", "кот собака", "кот кот"] # в новый список записываем элементы начального списка, измененные # с помощью replace result_list = [elem.replace("кот", "кошка", 1) for elem in str_list] print(result_list) # Выведет ['кошка', 'собака', 'кошка собака', 'кошка кот']
Применение replace для замены нескольких значений
С помощью словаря
Предыдущий пример позволяет заменить несколько элементов, однако все они имеют одно и то же значение «кот». Если необходимо заменить несколько разных значений, например «кот» на «кошка» и «кошка» на «собака», то необходимо реализовать чуть более сложную программу с использованием словарей:
# Функция для замены нескольких значений def multiple_replace(target_str, replace_values): # получаем заменяемое: подставляемое из словаря в цикле for i, j in replace_values.items(): # меняем все target_str на подставляемое target_str = target_str.replace(i, j) return target_str # создаем словарь со значениями и строку, которую будет изменять replace_values = my_str = "У меня есть кот и кошка" # изменяем и печатаем строку my_str = multiple_replace(my_str, replace_values) print(my_str)
Здесь replace используется в функции, аргументы которой исходная строка и словарь со значениями для замены.
У этого варианта программы есть один существенный недостаток, программист не может быть уверен в том, какой результат он получит. Дело в том, что словари — это последовательности без определенного порядка, поэтому рассматриваемый пример программы может привести к двум разным результатам в зависимости от того, как интерпретатор расположит элементы словаря:
В Python версии 3.6 и более поздних порядок перебора ключей будет такой же, как и при котором они созданы. В более ранних версиях Python порядок может отличаться.
Для решения этой проблемы можно заменить обычный словарь на упорядоченный словарь OrderedDict , который нужно импортировать следующей командой:
from collections import OrderedDict
Помимо импорта в программе нужно поменять буквально одну строку:
replace_values = OrderedDict([("кот", "кошка"), ("кошка", "собака")])
В этом случае, результат будет «У меня есть собака и собака», если же поменять местами элементы упорядоченного словаря при инициализации следующим образом: OrderedDict([(«кошка», «собака»), («кот», «кошка»)]) , то результат будет «У меня есть кошка и собака».
Вариант со списками
Замену нескольких значений можно реализовать и по-другому, для этого используем списки:
my_str = "У меня есть кот и кошка" # в цикле передаем список (заменяемое, подставляемое) в метод replace for x, y in ("кот", "кошка"), ("кошка", "собака"): my_str = my_str.replace(x, y) print(my_str) # Выведет "У меня есть собака и собака"
В данном примере цикл for делает 2 итерации:
- Подставляет в метод replace значения из первого списка: replace(«кот», «кошка»), в результате чего получается строка «У меня есть кошка и кошка».
- Подставляет в метод replace значения из второго списка: replace(«кошка», «собака»), получается строка «У меня есть собака и собака».
Другие типы Python и метод replace
Метод replace есть не только у строк, с его помощью программист может изменять последовательности байт, время и дату.
Синтаксис метода для последовательности байт ничем не отличается от синтаксиса для строк, для дат и времени в аргументах метода replace нужно писать идентификатор изменяемой цели, например:
from datetime import date t_date = date(2020, 4, 23) t_date = t_date.replace(day = 11) print(t_date) # Выведет 2020-04-11
Для времени метод replace применяется аналогично.
Python replace string with dictionary
Last updated: Feb 21, 2023
Reading time · 3 min
# Table of Contents
# Replace words in a String using a Dictionary in Python
To replace words in a string using a dictionary:
- Use a for loop to iterate over the dictionary’s items.
- Use the str.replace() method to replace words in the string with the dictionary’s items.
- The str.replace() method will return a new string with the matches replaced.
Copied!my_str = 'site | name' my_dict = 'site': 'bobbyhadz.com', 'name': 'borislav' > for key, value in my_dict.items(): my_str = my_str.replace(key, value) # 👇️ bobbyhadz.com | borislav print(my_str)
We used a for loop to iterate over the dictionary’s items.
The dict.items method returns a new view of the dictionary’s items ((key, value) pairs).
Copied!my_dict = 'site': 'bobbyhadz.com', 'name': 'borislav' > # 👇️ dict_items([('site', 'bobbyhadz.com'), ('name', 'borislav')]) print(my_dict.items())
On each iteration, we use the str.replace() method to replace substrings in the string with values from the dictionary.
Copied!my_str = 'site | name' my_dict = 'site': 'bobbyhadz.com', 'name': 'borislav' > for key, value in my_dict.items(): my_str = my_str.replace(key, value) # 👇️ bobbyhadz.com | borislav print(my_str)
The str.replace method returns a copy of the string with all occurrences of a substring replaced by the provided replacement.
The method takes the following parameters:
Name | Description |
---|---|
old | The substring we want to replace in the string |
new | The replacement for each occurrence of old |
count | Only the first count occurrences are replaced (optional) |
The method doesn’t change the original string. Strings are immutable in Python.
# Converting the keys or values of the dictionary to lowercase
Use the str.lower() method if you need to convert the dictionary’s keys and values to lowercase.
Copied!my_str = 'site | name' my_dict = 'SITE': 'BOBBYHADZ.COM', 'NAME': 'BORISLAV' > for key, value in my_dict.items(): my_str = my_str.replace(key.lower(), value.lower()) # 👇️ bobbyhadz.com | borislav print(my_str)
The str.lower method returns a copy of the string with all the cased characters converted to lowercase.
# Replace words in a String using a Dictionary with re.sub()
You can also use the re.sub() method to replace words in the strings using the dictionary’s items in a case-insensitive manner.
Copied!import re my_str = 'site | name' my_dict = 'SITE': 'BOBBYHADZ.COM', 'NAME': 'BORISLAV' > for key, value in my_dict.items(): my_str = re.sub( key, value.lower(), my_str, flags=re.IGNORECASE ) # 👇️ bobbyhadz.com | borislav print(my_str)
The re.sub method returns a new string that is obtained by replacing the occurrences of the pattern with the provided replacement.
Notice that we set the re.IGNORECASE flag to ignore the case when matching words in the string.
# Additional Resources
You can learn more about the related topics by checking out the following tutorials:
I wrote a book in which I share everything I know about how to become a better, more efficient programmer.
Replace words in a string using dictionary in Python
In this article, we will discuss how to replace multiple words in a string based on a dictionary.
Table of Contents
"This is the last rain of Season and Jack is here."
We want to replace multiple words in this string using a dictionary i.e.
Keys in the dictionary are the substrings that need to be replaced, and the corresponding values in the dictionary are the replacement strings. Like, in this case,
Frequently Asked:
The final string should be like,
ThAA AA BBB last rain of Season CCC Jack AA here.
There are different ways to do this. Let’s discuss them one by one.
Using str.replace() function
The string class has a member function replace(to_be_replaced, replacement) and it replaces all the occurrences of substring “to_be_replaced” with “replacement” string.
To replace all the multiple words in a string based on a dictionary. We can iterate over all the key-value pairs in a dictionary and, for each pair, replace all the occurrences of “key” substring with “value” substring in the original string.
For example:
strValue = "This is the last rain of Season and Jack is here." # Dictionary containing mapping of # values to be replaced and replacement values dictOfStrings = # Iterate over all key-value pairs in dict and # replace each key by the value in the string for word, replacement in dictOfStrings.items(): strValue = strValue.replace(word, replacement) print(strValue)
ThAA AA BBB last rain of Season CCC Jack AA here.
It replaced all the dictionary keys/words in a string with the corresponding values from the dictionary.
Using Regex
In Python, the regex module provides a function sub(pattern, replacement_str, original_str) to replace the contents of a string based on a matching regex pattern.
This function returns a modified copy of given string “original_str” after replacing all the substrings that matches the given regex “pattern” with a substring “replacement_str”.
To replace all the multiple substrings in a string based on a dictionary. We can loop over all the key-value pairs in a dictionary and for each key-value pair, replace all the occurrences of “key” substring with “value” substring in the original string using the regex.sub() function.
For example:
import re strValue = "This is the last rain of Season and Jack is here." # Dictionary containing mapping of # values to be replaced and replacement values dictOfStrings = # Iterate over all key-value pairs in dict and # replace each key by the value in the string for word, replacement in dictOfStrings.items(): strValue = re.sub(word, replacement, strValue) print(strValue)
ThAA AA BBB last rain of Season CCC Jack AA here.
It replaced all the dictionary keys/words in a string with the corresponding values from the dictionary.
We learned to replace multiple words in a string based on a dictionary in Python.
Related posts:
String replacement using dictionaries
I’ve always been bothered by the fact that there weren’t any built-in functions that could replace multiple substrings of a string in Python, so I created this function. Essentially, you supply it with a string, a dictionary of keys (substrings) and values (replacements), and then a few additional options.
def keymap_replace( string: str, mappings: dict, lower_keys=False, lower_values=False, lower_string=False, ) -> str: """Replace parts of a string based on a dictionary. This function takes a string a dictionary of replacement mappings. For example, if I supplied the string "Hello world.", and the mappings , it would return "Jello world!". Keyword arguments: string -- The string to replace characters in. mappings -- A dictionary of replacement mappings. lower_keys -- Whether or not to lower the keys in mappings. lower_values -- Whether or not to lower the values in mappings. lower_string -- Whether or not to lower the input string. """ replaced_string = string.lower() if lower_string else string for character, replacement in mappings.items(): replaced_string = replaced_string.replace( character.lower() if lower_keys else character, replacement.lower() if lower_values else replacement ) return replaced_string
print(keymap_replace( "Hello person. How is your day?", < "hello": "goodbye", "how": "what", "your": "that", "day": "" >, lower_keys=False, lower_values=False, lower_string=True ))