Содержание

Python Regex Replace and Replace All — re.sub()

В этой статье вы узнаете, как использовать регулярные выражения для выполнения операций поиска и замены строк в Python.

Регулярное выражение Python предлагает sub() subn() методов для поиска и замены шаблонов в строке. Используя эти методы, мы можем заменить одно или несколько вхождений шаблона регулярного выражения в целевой строке замещающей строкой.

Прочитав эту статью, вы сможете выполнить следующие 9 операций.0009 замена регулярных выражений операций в Python.

Operation Description
re.sub(pattern, replacement, string) Find and replaces all occurrences of pattern with replacement
re .sub(шаблон, замена, строка, количество=1) Найти и заменить только первых вхождений шаблона с заменой
RE. SUB (шаблон, замена, строка, count = n) Найти и заменяет первые N . заменить операции

Прежде чем двигаться дальше, давайте посмотрим на синтаксис метода sub() .

Содержание

  • Как использовать метод re.sub()
  • Пример регулярного выражения для замены всех пробелов символом подчеркивания
  • Регулярное выражение для удаления пробелов из строки
    • Замена нескольких пробелов одним пробелом с помощью регулярного выражения
  • Ограничить максимальное количество заменяемых шаблонов
  • Функция замены регулярного выражения несколько шаблонов регулярных выражений с различной заменой
  • Метод subn() RE
  • Как использовать

    метод re.sub()

    Чтобы понять, как использовать re.sub() для замены регулярного выражения, нам сначала нужно понять его синтаксис.

    Синтаксис re.sub()

     re. sub(шаблон, замена, строка[ количество, флаги]) 

    Шаблон регулярного выражения, замена и целевая строка являются обязательными аргументами. Количество и флаги являются необязательными.

    • шаблон : Шаблон регулярного выражения, который нужно найти внутри целевой строки.
    • замена: Замена, которую мы будем вставлять для каждого вхождения шаблона. замена может быть строкой или функцией.
    • строка : переменная, указывающая на целевую строку (в которой мы хотим выполнить замену).
    • count : Максимальное количество заменяемых экземпляров шаблона. Число всегда должно быть положительным целым числом, если оно указано. По умолчанию счетчик установлен на ноль, что означает, что метод re.sub() заменит все вхождения шаблона в целевой строке.
    • flags : Наконец, последний аргумент является необязательным и относится к флагам регулярных выражений. По умолчанию никакие флаги не применяются.
      Мы можем использовать множество значений флагов. Например, re.I используется для выполнения поиска и замены без учета регистра.

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

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

    Теперь давайте проверим это.

    Пример регулярного выражения для замены всех пробелов символом подчеркивания

    Теперь давайте посмотрим, как использовать re.sub() на простом примере. Здесь мы выполним две операции замены

    1. Заменим все пробелы дефисом
    2. Удалить все пробелы

    Давайте сначала рассмотрим первый сценарий.

    Шаблон для замены : \s

    В этом примере мы будем использовать \s специальная последовательность регулярного выражения, которая соответствует любому символу пробела, сокращение от [ \t\n\x0b\r\f]

    Предположим, у вас есть следующая строка, и вы хотите заменить все пробелы символом подчеркивания . \s+», «», target_str) # Строка после замены печать (res_str) # Вывод ‘Джесса знает, что такое тестирование и машинное обучение.’ 9\s+|\s+$», «», target_str) # Строка после замены печать (res_str) # Вывод ‘Джесса знает, что такое тестирование и машинное обучение’

    Замена нескольких пробелов одним пробелом с помощью регулярного выражения

     import re
    target_str = "Джесса разбирается в тестировании и машинном обучении\t\n"
    # \s+ для соответствия всем пробелам
    # заменить их, используя один пробел " "
    res_str = re.sub(r"\s+", " ", target_str)
    # строка после замены
    печать (res_str)
    # Вывод «Джесса знает, что такое тестирование и машинное обучение» 

    Ограничение максимального количества заменяемых вхождений шаблона

    Как я уже говорил, аргумент count метода re.sub() является необязательным. Аргумент count установит максимальное количество замен, которые мы хотим сделать внутри строки. По умолчанию счетчик установлен на ноль, что означает, что метод re.

    sub() заменит все вхождения шаблона в целевой строке.

    Заменяет только первые вхождения шаблона

    Установив count=1 внутри re.sub() , мы можем заменить только первое вхождение шаблона в целевой строке другой строкой.

    Заменяет n вхождений шаблона

    Установите значение счетчика на количество замен, которые вы хотите выполнить.

    Теперь давайте посмотрим на пример.

    Пример

     импорт
    # исходная строка
    target_str = "Джесса разбирается в тестировании и машинном обучении"
    # заменить только первое вхождение
    res_str = re.sub(r"\s", "-", target_str, count=1)
    # Строка после замены
    печать (res_str)
    # Вывод 'Джесса знает тестирование и машинное обучение'
    # заменить три вхождения
    res_str = re.sub(r"\s", "-", target_str, count=3)
    печать (res_str)
    # Вывод 'Джесса-знает-тестирование-и-машинное-обучение' 

    Функция замены регулярного выражения

    Мы видели, как найти и заменить шаблон регулярного выражения фиксированной строкой в ​​предыдущем примере. В этом примере мы видим, как заменить шаблон выводом функции .

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

    • Шаблон регулярного выражения, который соответствует всем прописным буквам
    • , и функция замены преобразует совпадающие прописные буквы в строчные.

    Шаблон для замены : [A-Z]

    Этот шаблон будет соответствовать любым прописным буквам в целевой строке.

    функция замены

    Вы можете передать функцию re.sub . Когда вы выполните re.sub()  , ваша функция получит объект соответствия в качестве аргумента. If может выполнять операцию замены, извлекая совпадающее значение из объекта сопоставления.

    Если замена является функцией, она вызывается для каждого неперекрывающегося экземпляра шаблона. Функция принимает один аргумент объекта соответствия и возвращает строку замены 9.

    0003

    Итак, в нашем случае мы сделаем следующее

    • Сначала нам нужно создать функцию для замены прописных букв на строчные
    • Затем нам нужно передать эту функцию в качестве аргумента замены для re. sub()
    • Всякий раз, когда re.sub() соответствует шаблону, он отправляет соответствующий объект соответствия функции замены
    • Внутри функции замены мы будем использовать метод group() для извлечения буквы в верхнем регистре и преобразовать его в строчную букву

    Пример :

     импорт повторно
    # функция замены для преобразования прописной буквы в строчную
    защита convert_to_lower(match_obj):
        если match_obj.group() не равно None:
            вернуть match_obj.group().lower()
    # Исходная строка
    str = "Эмма ЛЮБИТ АНАНАСОВЫЙ ДЕсер и КОКОСОВОЕ мороженое"
    # передать функцию замены в re.sub()
    res_str = re.sub(r"[A-Z]", convert_to_lower, str)
    # Строка после замены
    печать (res_str)
    # Вывод 'Эмма любит ананасовый десерт и кокосовое мороженое' 

    Регулярное выражение заменяет группу/несколько шаблонов регулярных выражений

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

    В этом разделе мы узнаем, как искать и заменять несколько шаблонов в целевой строке.

    Чтобы понять это, возьмем пример следующей строки

    student_names = "Emma-Kelly Jessa Joy Scott-Joe Jerry"

    Здесь мы хотим найти и заменить два разных шаблона одновременно.

    Мы хотим заменить каждую пробел и дефис(-) с запятой (,) внутри целевой строки. Для этого мы должны сначала написать два шаблона регулярных выражений.

    1. Шаблон 1: \s соответствует всем пробелам
    2. Шаблон 2: -   соответствует дефису (-)

    # Исходная строка student_names = «Эмма-Келли Джесса Джой Скотт-Джо Джерри» # заменить два шаблона одновременно # используйте ИЛИ (|) для разделения двух шаблонов res = re.sub(r»(\s)|(-)», «,», student_names) печать (разрешение) # Вывод ‘Эмма, Келли, Джесса, Джой, Скотт, Джо, Джерри’

    Заменить несколько шаблонов регулярных выражений разными заменами

    Чтобы понять это, возьмем пример следующей строки

    target_string = "ЭММА любит АНАНАСОВЫЙ десерт и КОКОСОВОЕ мороженое"

    Приведенная выше строка содержит комбинацию слов в верхнем и нижнем регистре. .

    Здесь мы хотим сопоставить и заменить два разных шаблона двумя разными заменами.

    1. Заменить каждое слово в верхнем регистре строчным
    2. И заменим каждое строчное слово на прописное

    Итак, мы сначала захватим две группы, а затем заменим каждую группу функцией замены. Если вы не знаете функцию замены, пожалуйста, прочитайте ее здесь.

    Группа 1 : ([A-Z]+)

    • Захват и замена всех слов в верхнем регистре строчными.
    • Класс символов [A-Z] означает любой символ от заглавной A до заглавной Z исключительно в верхнем регистре.

    Группа 2 : ([a-z]+)

    • Чтобы захватить и заменить все строчные слова на прописные
    • Класс символов [az] означает соответствие любому символу из строчных букв от a до z исключительно в нижнем регистре.

    Примечание : Всякий раз , когда вы хотите захватить группы , всегда записывайте их в скобках ( , ) .

    Пример :

     импорт повторно
    # функция замены для преобразования прописных слов в строчные
    # и строчное слово в верхний регистр
    защита convert_case (match_obj):
        если match_obj.group(1) не равно None:
            вернуть match_obj.group(1).lower()
        если match_obj.group(2) не None:
            вернуть match_obj.group(2).upper()
    # Исходная строка
    str = "ЭММА любит десерт с АНАНАСОМ и КОКОСОВОЕ мороженое"
    # группа 1 [A-Z]+ соответствует словам в верхнем регистре
    # группа 2 [a-z]+ соответствует словам в нижнем регистре
    # передать функцию замены 'convert_case' в re.sub()
    res_str = re.sub(r"([AZ]+)|([az]+)", convert_case, str)
    # Строка после замены
    печать (res_str)
    # Вывод 'Эмма ЛЮБИТ АНАНАСОВЫЙ ДЕСЕРТ И кокосовое МОРОЖЕНОЕ' 

    Метод subn() RE

    Метод re.subn() является новым методом, хотя он выполняет ту же задачу, что и метод re.sub() , но возвращаемый им результат немного отличается.

    Метод

    re.subn() возвращает кортеж из двух элементов.

    1. Первый элемент результата — это новая версия целевой строки после внесения всех замен.
    2. Второй элемент — количество произведенных замен

    Давайте проверим это на том же примере, что и раньше, только заменив метод.

    Пример

     импорт
    target_string = "Эмма любит мороженое с АНАНАСОМ, КОКОСОМ, БАНАНОМ"
    результат = re.subn(r"[AZ]{2,}", "MANGO", target_string)
    печать (результат)
    # Вывод («Эмма любит МАНГО, МАНГО, МАНГО-мороженое», 3) 

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

    Мы также можем использовать аргумент count метода subn() . Таким образом, значение второго элемента результирующего кортежа должно измениться соответствующим образом.

    Итак, давайте проверим это.

    Пример

     импорт
    target_string = "Эмма любит мороженое с АНАНАСОМ, КОКОСОМ, БАНАНОМ"
    результат = re.subn(r"[A-Z]{2,}", "MANGO", target_string, count=2)
    печать (результат)
    # Вывод («Эмма любит мороженое MANGO, MANGO, BANANA», 2) 

    Регулярное выражение Python: поиск и замена строк | Гибкие Учебники


    В этом руководстве вы узнаете, как использовать регулярное выражение (или регулярное выражение) для поиска и замены строк в Python.
    Regex можно использовать для выполнения различных задач в Python. Он используется для выполнения операций поиска и замены, замены шаблонов в тексте, проверки наличия в строке определенного шаблона. Но сегодня мы узнаем о выполнении операций поиска и замены с использованием регулярных выражений.

    Содержание

    • Регулярное выражение Python заменить
    • Regex для поиска и замены
    • Замена нескольких шаблонов с помощью регулярного выражения
    • Замена нескольких шаблонов несколькими заменами с использованием регулярного выражения
    • Заключительные мысли

    Регулярное выражение Python заменить

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

     импорт в отношении 

    Теперь мы узнаем об операции поиска и замены с использованием регулярных выражений.

    Регулярное выражение для поиска и замены

    Метод регулярного выражения ищет строку, а затем заменяет ее другим значением. Для этого используется функция Python re.sub() в модуле re.

    Синтаксис:

     re.sub(шаблон, замена, строка, количество=0, флаги=0) 

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

    Ввод:

     импорт повторно
    str = "[электронная почта защищена]"
    print(re.sub("[az]*@", "[email protected]", str)) 

    Вывод:

     [email protected] 

    Замена нескольких шаблонов с помощью регулярного выражения

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

    Синтаксис:

     re.sub(pattern_1 | pattern_2, замена, строка, count=0, flags=0) 

    Ввод:

     import re
    str = "Джо-Ким Эма Макс Аби Лиза"
    print(re.sub("(\s) | (-)", ", ", str)) 

    Вывод:
     "Джо, Ким, Эма, Макс, Эби, Лиза" 

    Замена нескольких шаблонов несколькими заменами с использованием регулярных выражений

    Теперь, если вы когда-нибудь захотите заменить несколько шаблонов, но с разными заменами, тогда также можно использовать регулярное выражение. Это можно сделать с небольшой модификацией, которую вы можете увидеть в следующем примере.

    Ввод:

     импорт повторно
    защита convert_case (match_obj):
      если match_obj.group(1) не равно None:
        вернуть match_obj.group(1).lower()
      если match_obj.group(2) не None:
        вернуть match_obj.group(2).upper()
    str = "JOE KIM MAX ABY LIZA"
    print(re.sub(r"([AZ]+) | ([az]+)", convert_case, str)) 

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

    Вывод:

     "Joe Kim MaX a by LiZa" 

    Заключительные мысли

    Для замены строки в Python используется метод regex sub(). Это встроенный метод Python в модуле re, который возвращает замененную строку. Не забудьте импортировать модуль re. Этот метод ищет шаблон в строке, а затем заменяет его новым заданным выражением.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *