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

Замена вхождения подстроки в строке 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 неизменяемы, что просто означает, что вы не можете изменить строку. Однако вы можете повторно присвоить ссылочной переменной новое значение.

Читайте также:  Адаптивный дизайн css мобильный

Чтобы, казалось бы, выполнить эту операцию на месте, мы можем просто переназначить 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() в 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. Он позволяет легко заменять все вхождения одной подстроки на другую в строке и может использоваться во многих ситуациях. Также может использоваться для замены нескольких символов одновременно, а также для ограничения количества замен. Однако, при использовании этого метода следует быть осторожным и учитывать специфику конкретной задачи.

Источник

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