- Замена вхождения подстроки в строке Python
- replace()
- Заменить n вхождений подстроки
- Вхождения подстроки в регулярных выражениях
- Использование функции sub()
- Сопоставление с шаблоном без учета регистра
- Использование объектов шаблона
- Функция subn()
- Вывод
- Источник:
- Изучаем метод replace() в Python: простой способ замены подстрок
- Синтаксис
- Примеры использования метода replace()
- Заключение
Замена вхождения подстроки в строке 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()
Самый простой способ сделать это — использовать встроенную функцию — 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 , остается неизменной. Строки в Python неизменяемы, что просто означает, что вы не можете изменить строку. Однако вы можете повторно присвоить ссылочной переменной новое значение.
Чтобы, казалось бы, выполнить эту операцию на месте, мы можем просто переназначить 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 .
Регулярные выражения — сложная тема с широким спектром использования в информатике, поэтому мы не будем вдаваться в подробности в этой статье.
По сути, регулярное выражение определяет шаблон. Например, предположим, что у нас есть текст о людях, владеющих кошками и собаками, и мы хотим заменить оба термина словом «pet» . Во-первых, нам нужно определить шаблон, который соответствует обоим терминам, например — (cat|dog) .
Использование функции sub()
Разобравшись с шаблоном, мы собираемся использовать функцию re.sub() со следующим синтаксисом:
re.sub(pattern, repl, string, count, flags)
Первый аргумент — это шаблон, который мы ищем (строка или объект Pattern ), repl это то, что мы собираемся вставить (может быть строкой или функцией; если это строка, обрабатываются любые escape-символы в ней обратной косой чертой) и 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.
Сопоставление с шаблоном без учета регистра
Например, чтобы выполнить сопоставление с шаблоном без учета регистра, мы установим для параметра 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() .
При необходимости модуль re стандартной библиотеки предоставляет более разнообразный набор инструментов, который можно использовать для решения более узких задач, таких как поиск шаблонов и поиск без учета регистра.
Источник:
Изучаем метод replace() в Python: простой способ замены подстрок
Метод replace() в Python используется для замены всех вхождений указанной подстроки в строке на другую подстроку.
Его можно использовать для многих задач, таких как изменение текстовых файлов, удаление или замена определенных символов или строк в строке.
В этой статье мы рассмотрим, как использовать метод replace() , а также приведем несколько примеров его использования.
Синтаксис
Метод replace() заменяет все вхождения одной подстроки на другую в строке и имеет следующий синтаксис:
- str — строка, в которой нужно выполнить замену;
- old — подстрока, которую нужно заменить;
- new — новая подстрока, которой нужно заменить все вхождения old;
- count — необязательный параметр, который указывает, сколько раз нужно выполнить замену. По умолчанию заменятся все вхождения old.
Примеры использования метода replace()
Замена символов в строке
Допустим, у вас есть строка, в которой нужно заменить все вхождения одного символа на другой. В этом примере мы заменяем все запятые в строке на точки с помощью метода replace() :
s = '3,14' new_s = s.replace(',', '.') print(new_s) # '3.14'
Замена слов в строке
Метод replace() также может использоваться для замены слов в строке. Например, в следующем примере мы заменяем все вхождения слова «Python» на «JavaScript» в строке:
s = 'Python is my favorite programming language. I love Python!' new_s = s.replace('Python', 'JavaScript') print(new_s) # 'JavaScript is my favorite programming language. I love JavaScript!'
Ограничение количества замен
Метод replace() позволяет ограничить количество замен с помощью параметра count . Например, в следующем примере мы заменяем только первые два вхождения слова «Python» на «JavaScript»:
s = 'Python is my favorite programming language. I love Python!' new_s = s.replace('Python', 'JavaScript', 2) print(new_s) # 'JavaScript is my favorite programming language. I love Python!'
Замена нескольких символов одновременно
Метод replace() также может использоваться для замены нескольких символов одновременно. Например, в следующем примере мы заменяем все вхождения символов a , b и c на символ x :
s = 'abcabc' new_s = s.replace('a', 'x').replace('b', 'x').replace('c', 'x') print(new_s) # 'xxxxxx'
Замена со знаками препинания
Метод replace() может использоваться для замены знаков препинания на пробелы. Например, в следующем примере мы заменяем знаки препинания на пробелы:
s = "Hello, world! This is a test." new_s = s.replace(",", " ").replace("!", " ") print(new_s) # 'Hello world This is a test '
Замена только в начале или в конце строки
Метод replace() заменяет все вхождения подстроки в строке. Если вы хотите заменить только первое вхождение подстроки в строке или только в начале или в конце строки, вам может потребоваться использовать методы startswith() или endswith() . Например, в следующем примере мы заменяем только первое вхождение слова «Python» на «JavaScript»:
s = 'Python is my favorite programming language. I love Python!' new_s = s.replace('Python', 'JavaScript', 1) print(new_s) # 'JavaScript is my favorite programming language. I love Python!'
Использование регулярных выражений
Метод replace() не поддерживает использование регулярных выражений. Если вам нужно использовать регулярные выражения для выполнения замены в строке, вам следует использовать модуль re . Например, мы можем использовать модуль re для замены всех цифр в строке на символ x :
import re s = "123abc456def789" new_s = re.sub(r"\d", "x", s) print(new_s) # 'xxxabcxxxdefxxx'
Заключение
Метод replace() является мощным инструментом для работы со строками в Python. Он позволяет легко заменять все вхождения одной подстроки на другую в строке и может использоваться во многих ситуациях. Также может использоваться для замены нескольких символов одновременно, а также для ограничения количества замен. Однако, при использовании этого метода следует быть осторожным и учитывать специфику конкретной задачи.