Функция Regex sub() в Python с примерами

Содержание

Что такое функция re.sub() в Python?

Sub() — это функция встроенного модуля re, которая обрабатывает регулярные выражения в Python. Функция sub() имеет следующий синтаксис:

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

В этом синтаксисе:

  • pattern — это регулярное выражение, которому вы хотите сопоставить. Помимо регулярного выражения, шаблон может быть объектом Pattern.
  • repl — это замена.
  • string — это входная строка.
  • Параметр count указывает максимальное количество совпадений, которые должна заменить функция sub(). Если вы передадите ноль в параметр count или полностью пропустите его, функция sub() заменит все совпадения.
  • flags — это один или несколько флагов регулярных выражений, которые изменяют стандартное поведение шаблона.

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

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

Примеры функции regex sub() в Python

Давайте рассмотрим несколько примеров использования функции regex sub().

1) Возврат простого номера телефона

В следующем примере функция sub() используется для преобразования номера телефона (212)-456-7890 в 2124567890:

import re

phone_no = '(212)-456-7890'
pattern = '\D'
result = re.sub(pattern, '',phone_no)

print(result)

Выход:

2124567890

В этом примере \D — это набор символов инверсных цифр, который соответствует любому одиночному символу, не являющемуся цифрой. Поэтому функция sub() заменяет все нецифровые символы пустой строкой ».

2) Замена крайних левых непересекающихся вхождений шаблона

В следующем примере 00 заменяется на » в строке ‘000000’:

import re

pattern = '00'
s = '00000'
result = re.sub(pattern,'',s)

print(result)

Выход:

0

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

3) Использование sub() с примером обратной ссылки

В следующем примере используется функция sub() для замены текста, заключенного в(*)(кстати, это формат уценки) тегом в HTML:

import re

s = 'Make the World a *Better Place*'
pattern = r'\*(.*?)\*'
replacement = r'<b>\1<\\b>'
html = re.sub(pattern, replacement, s)

print(html)

Выход:

import re

s = 'Make the World a *Better Place*'
pattern = r'\*(.*?)\*'
replacement = r'<b>\1<\\b>'
html = re.sub(pattern, replacement, s)

print(html)

Выход:

Make the World a <b>Better Place<\b>

В этом примере шаблон r’\*(.*?)\*’ находит текст, который начинается и заканчивается звездочкой(*). У него есть группа захвата, которая захватывает текст между звездочками(*).

Замена представляет собой регулярное выражение с обратной ссылкой. Обратная ссылка \1 относится к первой группе шаблона, которая представляет собой текст между звездочками(*).

4) Использование функции regex sub() с repl в качестве функции

Предположим, у вас есть список строк, в котором каждый элемент содержит как алфавит, так и число:

l = ['A1','A2','A3']

И вы хотите возвести в квадрат число в каждом элементе списка. Например, A1 становится A1, A2 становится A4, а A3 становится A9. Для этого вы можете использовать функцию sub().

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

Ниже показано, как использовать второй аргумент как функцию:

import re

def square(match):
    num = int(match.group())
    return str(num*num)

l = ['A1','A2','A3']
pattern = r'\d+'
new_l = [re.sub(pattern, square, s) for s in l]

print(new_l)

Выход:

['A1', 'A4', 'A9']

Как это работает.

  • Сначала определите список строк:
l = ['A1','A2','A3']
  • Во-вторых, определите шаблон \d+, соответствующий одной или нескольким цифрам:
pattern = r'\d+'
  • В-третьих, замените цифры их квадратами, вызвав функцию sub() и передав функцию Square():
new_l = [re.sub(pattern, square, s) for s in l]
  • Наконец, определите функцию Square(), которая возводит в квадрат совпавшую цифру и возвращает ее:
def square(match):
    num = int(match.group())
    return str(num*num)
Похожие посты
Добавить комментарий

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