Изменение строки в 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 =
Изменить её надо на:
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 применяется аналогично.
Метод str.replace() в Python, меняет подстроку/символ в строке
Производит поиск и замену подстроки (символа) в строке
Синтаксис:
str.replace(old, new[, count])
Параметры:
- old — str , подстрока или символ который меняем
- new — str , подстрока или символ на который меняем
- count — int , сколько раз меняем
Возвращаемое значение:
- измененная копия строки.
Описание:
Метод str.replace() вернет копию строки, в которой все вхождения подстроки old заменены на подстроку new .
Если указан необязательный аргумент count , заменяются только первые вхождения count .
Примечание. Производить поиск и замену подстроки/символа в строке можно так же при помощи регулярных выражений, используя функцию re.sub() .
Общие примеры замены подстроки/символа в строке.
# замена обратных кавычек в строке >>> x = 'все вхождения подстроки `old` заменены на подстроку `new`' >>> x.replace('`', '-') # 'все вхождения подстроки -old- заменены на подстроку -new-' # замена обратных кавычек с ограничением в 2 замены >>> x = '2 вхождения подстроки `old` заменены на подстроку `new`' >>> x.replace('`', '~', 2) # '2 вхождения подстроки ~old~ заменены на подстроку `new`' # замена нескольких значений >>> x.replace('old', 'старая').replace('new', 'новая') # 'все вхождения подстроки `старая` заменены на подстроку `новая`'
Замены нескольких значений в строке одной операцией.
Для замены нескольких разных символов/подстрок в одной операции (множественная замена) необходимо определить функцию, которая будет принимать исходную строку и список символов/подстрок, каждая со своим новым значением. Символы/подстроки с новыми значениями можно передавать разными способами, например как список двойных кортежей в виде [(‘old’, ‘new’), . ] или как словарь, где ключ будет старым значением, а значение — новым . В зависимости от того, в каком виде передаются значения, будет строится логика извлечения этих значений для осуществления замены в исходной строке.
В примере будем передавать символы/подстроки с их новыми значениями в виде кортежа, так как он дает больше гибкости. Гибкость будет состоять в том, что в примере будет возможность добавления количества замены каждого символа/подстроки в строке.
# примерная реализация функции множественной замены в строке # здесь еще нужно подумать над проверкой типов в кортежах . def replace(line, old_new_num): # при итерации по списку распаковываем кортежи на # старое и новое значения, а так же `n` - количество замен for vals in old_new_num: # если кортежа имеет 3 элемента, # значит присутствует количество замен if len(vals) == 3: # распаковываем кортеж old, new, n = vals # передаем аргументы методу и line = line.replace(old, new, n) elif len(vals) == 2: # распаковываем кортеж old, new = vals line = line.replace(old, new) else: # если в кортеже НЕ 2 или 3 элемента, # то поднимаем исключение raise 'кортеж должен состоять из 2-х или 3-х элементов' return line # сохраняем функцию в файл test.py и запускаем # $ python3 -i temp.py # исходная строка >>> line = 'абра-абра-кад-абра' # элементы кортежа означают: # ('заменяемое значение','новое значение', количество замен в строке) >>> replace_val = [('а', 'A', 3), ('б', 'Б'), ('кад', 'КАД')] >>> new_line = replace(line, replace_val) >>> new_line # 'AБрA-AБра-КАД-аБра'
Из примера видим, что новая функция replace() работает как и ожидается, а именно символ ‘а’ заменился 3 раза, символ ‘б’ и подстрока ‘кад’ заменились по количеству совпадений.
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Метод str.capitalize(), первая буква в строке заглавная
- Метод str.casefold(), сворачивает регистр строки
- Метод str.center(), выравнивает строку по центру
- Метод str.count(), считает совпадения в строке
- Метод str.encode(), преобразует строку в байты
- Метод str.endswith(), совпадение с концом строки
- Метод str.expandtabs(), меняет табуляцию на пробел
- Метод str.find(), индекс первого совпадения в строке
- Метод str.format(), форматирует строку
- Метод str.format_map()
- Метод str.index(), индекс первого совпадения подстроки
- Метод str.isalnum(), строка состоит из цифр и букв
- Метод str.isalpha(), строка состоит только из букв
- Метод str.isascii(), все символы в строке являются ASCII
- Метод str.isdecimal(), проверяет строку на десятичное число
- Метод str.isdigit(), строка состоит только из цифр
- Метод str.isidentifier() проверяет строку на идентификатор Python
- Метод str.islower( ), проверяет строку на нижний регистр
- Метод str.isnumeric(), проверяет строку на числовые символы
- Метод str.isprintable(), проверяет на доступность для печати
- Метод str.isspace(), является ли строка пробелом
- Метод str.istitle(), проверяет наличие заглавных букв в словах
- Метод str.isupper(), проверяет строку на верхний регистр
- Метод str.join(), объединяет список строк
- Метод str.ljust(), ровняет строку по левому краю
- Метод str.lower(), строку в нижний регистр
- Метод str.lstrip(), обрезает символы в начале строки
- Метод str.maketrans(), таблица символов для str.translate()
- Метод str.partition(), делит строку по первому совпадению
- Метод str.removeprefix(), удаляет префикс строки
- Метод str.removesuffix(), удаляет суффикс строки
- Метод str.replace(), меняет подстроку/символ в строке
- Метод str.rfind(), индекс последнего совпадения подстроки
- Метод str.rindex(), индекс последнего совпадения в строке
- Метод str.rjust(), ровняет строку по правому краю
- Метод str.rpartition(), делит строку по последнему совпадению
- Метод str.rsplit(), делит строку справа
- Метод str.rstrip(), обрезает символы на конце строки
- Метод str.split(), делит строку по подстроке
- Метод str.splitlines(), делит текст по символу ‘\n’
- Метод str.startswith(), совпадение с началом строки
- Метод str.strip(), обрежет строку с обоих концов
- Метод str.swapcase(), сменит регистр символов в строке
- Метод str.title(), каждое слово с заглавной буквы
- Метод str.translate(), транслирование строки
- Метод str.upper(), переведет строку в верхний регистр
- Метод str.zfill(), дополнит строку нулями
- Форматирование строк в стиле printf
- F-string. Форматированные строки
Замена строки Python
В этой статье мы поговорим о том, как заменить подстроку внутри строки в Python, используя метод replace() .
.replace () Метод
В Python строки представлены как неизменяемые объекты str . Класс str имеет множество методов, позволяющих управлять строками.
Метод .replace() имеет следующий синтаксис:
str.replace(old, new[, maxreplace])
- str — строка, с которой вы работаете.
- old — Подстрока, которую нужно заменить.
- new — подстрока, заменяющая старую подстроку.
- maxreplace — необязательный аргумент. Количество совпадений старой подстроки, которую вы хотите заменить. Матчи отсчитываются с начала строки.
Метод возвращает копию строки srt с некоторыми или всеми совпадениями подстроки old замененной на new . Если maxreplace не указан, заменяются все вхождения.
В приведенном ниже примере мы заменяем подстроку far в строке s с miles :
s = 'A long time ago in a galaxy far, far away.'s.replace('far', 'miles')
Результатом является новая строка:
'A long time ago in a galaxy miles, miles away.'
Строковые литералы обычно заключаются в одинарные кавычки, хотя можно использовать и двойные кавычки.
Если maxreplace необязательный аргумент maxreplace , он ограничивает количество заменяемых совпадений. В следующем примере мы заменяем только первое вхождение:
s = 'My ally is the Force, and a powerful ally it is.'s.replace('ally', 'friend', 1)
Строка результата будет выглядеть так:
'My friend is the Force, and a powerful ally it is.'
Чтобы удалить подстроку, используйте вместо нее пустую строку » . Например, чтобы удалить space из следующей строки, вы должны использовать:
s = 'That’s no moon. It’s a space station.'s.replace('space ', '')
Новая строка будет выглядеть следующим образом:
`That’s no moon. It’s a station.'
Заменить подстроку в списке строк
Чтобы заменить подстроку в списке строк, используйте конструкцию понимания списка, как показано ниже:
s.replace('old', 'new') for s in list
Давайте посмотрим на следующий пример:
names = ['Anna Grace', 'Betty Grace', 'Emma Grace']new_names = [s.replace('Grace', 'Lee') for s in names]print(new_names)
Приведенный выше код создает копию списка, в котором все вхождения подстроки Grace заменены на Lee :
['Anna Lee', 'Betty Lee', 'Emma Lee']
Выводы
Замена подстроки в строке — одна из самых основных операций при написании кода на Python. После прочтения этого руководства вы должны хорошо понимать, как использовать метод replace() .
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Какой метод используется для замены подстроки python?
Для замены подстроки можно использовать метод str.replace(old, new[, count]) . Он вернет копию строки, в которой все подстроки old будут заменены на new (необязательный параметр count указывает сколько замен нужно производить).
Так как строка неизменяемый формат, то метод возвращает именно копию. Но можно переприсвоить переменную, и замена «как будто» произойдет в той же строке.
a = 'The Young Pope' a.replace('Young', 'New') # 'The New Pope' a # 'The Young Pope' a = a.replace('Young', 'New') a # 'The New Pope'