Функция Regex sub() в Python с примерами
- Что такое функция re.sub() в Python?
- Примеры функции regex sub() в Python
- 1) Возврат простого номера телефона
- 2) Замена крайних левых непересекающихся вхождений шаблона
- 3) Использование sub() с примером обратной ссылки
- 4) Использование функции regex sub() с repl в качестве функции
Что такое функция 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)