Python заменить все вхождения подстроки

Содержание
  1. Rukovodstvo
  2. статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.
  3. Замена вхождений подстроки в строке с помощью Python
  4. Введение Замена всех или n вхождений подстроки в заданной строке — довольно распространенная проблема манипуляций со строками и обработки текста в целом. К счастью, большинство этих задач упрощаются в Python благодаря огромному набору встроенных функций, включая эту. Допустим, у нас есть строка, содержащая следующее предложение: Кареглазый мужчина водит коричневую машину. Наша цель — заменить слово «коричневый» словом «синий»: голубоглазый мужчина водит синюю машину. В этой статье
  5. Вступление
  6. заменять()
  7. Заменить n вхождений подстроки
  8. Вхождения подстроки в регулярных выражениях
  9. Использование функции sub ()
  10. Сопоставление с шаблоном без учета регистра
  11. Использование объектов шаблона
  12. Функция subn ()
  13. Заключение
  14. Replace Python
  15. Введение в тему
  16. Что делает метод
  17. Синтаксис
  18. Параметры
  19. Возвращаемое значение
  20. Применение replace для замены нескольких значений
  21. С помощью словаря

Rukovodstvo

статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.

Замена вхождений подстроки в строке с помощью Python

Введение Замена всех или n вхождений подстроки в заданной строке — довольно распространенная проблема манипуляций со строками и обработки текста в целом. К счастью, большинство этих задач упрощаются в Python благодаря огромному набору встроенных функций, включая эту. Допустим, у нас есть строка, содержащая следующее предложение: Кареглазый мужчина водит коричневую машину. Наша цель — заменить слово «коричневый» словом «синий»: голубоглазый мужчина водит синюю машину. В этой статье

Вступление

Замена всех или n вхождений подстроки в заданной строке — довольно распространенная проблема манипуляций со строками и обработки текста в целом. К счастью, большинство этих задач упрощаются в Python благодаря огромному набору встроенных функций, включая эту.

Допустим, у нас есть строка, содержащая следующее предложение:

 The brown-eyed man drives a brown car. 

Наша цель — заменить слово «brown» словом «blue» :

 The blue-eyed man drives a blue car. 

В этой статье мы будем использовать replace() а также функции sub() и subn() с шаблонами для замены всех вхождений подстроки из строки.

заменять()

Самый простой способ сделать это — использовать встроенную функцию replace() :

 string.replace(oldStr, newStr, count) 

Первые два параметра являются обязательными, а третий — необязательным. oldStr — это подстрока, которую мы хотим заменить на newStr . Стоит отметить, что функция возвращает новую строку с выполненным преобразованием, не затрагивая исходную.

 string_a = "The brown-eyed man drives a brown car." string_b = string_a.replace("brown", "blue") print(string_a) print(string_b) 

Мы выполнили операцию с string_a , упаковали результат в string_b и распечатали их оба.

 The brown-eyed man drives a brown car. The blue-eyed man drives a blue car. 

Опять же, строка в памяти, на string_a указывает string_a, остается неизменной. Строки в Python неизменяемы, что просто означает, что вы не можете изменить строку. Однако вы можете повторно присвоить ссылочной переменной новое значение.

Читайте также:  Zip архив для java

Чтобы, казалось бы, выполнить эту операцию на месте , мы можем просто переназначить string_a себе после операции:

 string_a = string_a.replace("brown", "blue") print(string_a) 

Здесь новая строка, сгенерированная методом replace() присваивается переменной string_a

Заменить n вхождений подстроки

А что, если мы не хотим изменять все вхождения подстроки? Что, если мы хотим заменить первые n ?

Вот тут и появляется третий параметр функции replace() . Он представляет количество подстрок, которые будут заменены. Следующий код заменяет только первое вхождение слова «brown» словом «blue» :

 string_a = "The brown-eyed man drives a brown car." string_a = string_a.replace("brown", "blue", 1) print(string_a) 
 The blue-eyed man drives a brown car. 

По умолчанию третий параметр настроен на изменение всех вхождений.

Вхождения подстроки в регулярных выражениях

Чтобы усугубить проблему, допустим, мы хотим не только заменить все вхождения определенной подстроки, но и заменить все подстроки, соответствующие определенному шаблону. Даже это можно сделать с однострочником, с использованием регулярных выражений и модуля re

Регулярные выражения — сложная тема с широким спектром использования в информатике, поэтому мы не будем вдаваться в подробности в этой статье, но если вам нужно быстрое начало, вы можете ознакомиться с нашим руководством по регулярным выражениям в Python .

По сути, регулярное выражение определяет шаблон. Например, предположим, что у нас есть текст о людях, владеющих кошками и собаками, и мы хотим заменить оба термина словом «pet» . Во-первых, нам нужно определить шаблон, который соответствует обоим терминам, например — (cat|dog) .

Использование функции sub ()

Разобравшись с шаблоном, мы собираемся использовать re.sub() которая имеет следующий синтаксис:

 re.sub(pattern, repl, string, count, flags) 

Первый аргумент — это шаблон, который мы ищем (строка или Pattern ), repl — это то, что мы собираемся вставить (может быть строкой или функцией; если это строка, любые символы обратной косой черты в ней будут обработано), а string — это строка, в которой мы ищем.

Необязательными аргументами являются count и flags которые указывают, сколько вхождений необходимо заменить, и флаги, используемые для обработки регулярного выражения, соответственно.

Если шаблон не соответствует ни одной подстроке, исходная строка будет возвращена без изменений:

 import re string_a = re.sub(r'(cat|dog)', 'pet', "Mark owns a dog and Mary owns a cat.") print(string_a) 
 Mark owns a pet and Mary owns a pet. 

Сопоставление с шаблоном без учета регистра

re.IGNORECASE регистра, мы установим для параметра flag значение re.IGNORECASE:

 import re string_a = re.sub(r'(cats|dogs)', "Pets", "DoGs are a man's best friend", flags=re.IGNORECASE) print(string_a) 

Теперь будет учитываться любая комбинация падежей «dogs» . При сопоставлении шаблона с несколькими строками, чтобы избежать его копирования в нескольких местах, мы можем определить объект Pattern У них также есть sub() с синтаксисом:

 Pattern.sub(repl, string, count) 

Использование объектов шаблона

Давайте определим Pattern для кошек и собак и проверим пару предложений:

 import re pattern = re.compile(r'(Cats|Dogs)') string_a = pattern.sub("Pets", "Dogs are a man's best friend.") string_b = pattern.sub("Animals", "Cats enjoy sleeping.") print(string_a) print(string_b) 
 Pets are a man's best friend. Animals enjoy sleeping. 

Функция subn ()

Также существует subn() с синтаксисом:

 re.subn(pattern, repl, string, count, flags) 

Функция subn() возвращает кортеж со строкой и количеством совпадений в строке, которую мы искали:

 import re string_a = re.subn(r'(cats|dogs)', 'Pets', "DoGs are a mans best friend", flags=re.IGNORECASE) print(string_a) 
 ('Pets are a mans best friend', 1) 

Объект Pattern содержит аналогичную subn() :

 Pattern.subn(repl, string, count) 

И он используется очень похожим образом:

 import re pattern = re.compile(r'(Cats|Dogs)') string_a = pattern.subn("Pets", "Dogs are a man's best friend.") string_b = pattern.subn("Animals", "Cats enjoy sleeping.") print(string_a) print(string_b) 
 ("Pets are a man's best friend.", 1) ('Animals enjoy sleeping.', 1) 

Заключение

Python предлагает простые и простые функции для обработки строк. Самый простой способ заменить все вхождения данной подстроки в строке — использовать функцию replace()

Читайте также:  Str maketrans python 3

При необходимости re стандартной библиотеки предоставляет более разнообразный набор инструментов, который можно использовать для решения более узких задач, таких как поиск шаблонов и поиск без учета регистра.

Licensed under CC BY-NC-SA 4.0

Источник

Replace Python

Основы

Введение в тему

В этом уроке мы рассмотрим как заменить подстроку внутри строки, используя метод replace().

Метод replace Python возвращает копию строки, в которой все вхождения искомой подстроки заменяются другой подстрокой.

Что делает метод

Слово replace переводится как «заменять», что название этого метода является отличным описанием того, что он делает. С помощью метода replace можно заменить часть строки, называемую подстрокой или её всю на другую строку. Метод replace позволяет гибко изменять только необходимые части строки str.

Синтаксис

Метод .replace() имеет следующий синтаксис:

Параметры

В качестве аргументов в метод передаются:

str — Строка, к которой применяется метод (тип данных string).

old — Подстрока, которую необходимо найти и заменить (тип данных string).

new — Новая подстрока, которой будет заменена старая (тип данных string).

count— Необязательный аргумент. Количество совпадений старой подстроки, которую необходимо заменить (тип данных int). Если этот параметр не указать, то будут заменены все вхождения подстрок на новые.

Вот несколько примеров применения метода:

my_var = "Ivan, Rinat, Olga, Kira" #Заменяем все подстроки "Olga" в строке a = my_var.replace("Olga", "Olya") print(a) #Заменяем первую подстроку "i" в строке b = my_var.replace("i", "I", 1) print(b) #Заменяем первые две подстроки "a" в строке c = my_var.replace("a", "A", 2) print(c) # Вывод: Ivan, Rinat, Olya, Kira Ivan, RInat, Olga, Kira IvAn, RinAt, Olga, Kira

Возвращаемое значение

Метод возвращает копию строки, в которой старая подстрока заменяется новой подстрокой. Строка, к которой применяется метод остаётся неизменной. Если искомая подстрока не обнаружена, то возвращается копия исходной строки.

my_var = "Ivan, Rinat, Olga, Kira" #Заменяем все вхождения "Olga" в строке a = my_var.replace("Roman", "Roma") print(a) # Вывод: Ivan, Rinat, Olga, Kira

Применение replace для замены нескольких значений

С помощью данного метода возможно выполнить поиск и замену нескольких значений, например элементов коллекции:

my_var = ['Ivan', 'Rinat', 'Olga', 'Kira'] # в новый список записываем элементы начального списка, измененные # с помощью replace new_list = [_.replace("i", "A", 1) for _ in my_var] print(new_list) # Вывод: ['Ivan', 'RAnat', 'Olga', 'KAra']

С помощью словаря

Предыдущий пример позволяет заменить несколько элементов, однако все они имеют одно и то же значение «i». Если необходимо заменить несколько разных значений, например «i» на «I» и «a» на «A», то необходимо реализовать чуть более сложную программу с использованием словарей:

# Функция для замены нескольких значений 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 = "Ivan, Rinat, Olga, Kira" # изменяем и печатаем строку my_str = multiple_replace(my_str, replace_values) print(my_str) # Вывод: IvAn, RInAt, OlgA, KIrA

Здесь replace используется в функции, аргументы которой исходная строка и словарь со значениями для замены.

У этого варианта программы есть один существенный недостаток, программист не может быть уверен в том, какой результат он получит. Дело в том, что словари — это последовательности без определенного порядка, поэтому рассматриваемый пример программы может привести к двум разным результатам в зависимости от того, как интерпретатор расположит элементы словаря:

В Python версии 3.6 и более поздних порядок перебора ключей будет такой же, как и при котором они созданы. В более ранних версиях Python порядок может отличаться.

Для решения этой проблемы можно заменить обычный словарь на упорядоченный словарь OrderedDict, который нужно импортировать следующей командой:

Источник

Оцените статью