Квантификаторы регулярных выражений в Python

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

Содержание

Что такое квантификаторы регулярных выражений в Python?

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

Квантификатор Имя Значение
* Звездочка Сопоставляет предыдущий элемент ноль или более раз.
+ Плюс Сопоставляет предыдущий элемент один или несколько раз.
? Вопросительный знак Сопоставит предшествующий элемент ноль или один раз.
{ n } Фигурные скобки Сопоставит предыдущий элемент ровно n раз.
{ n ,} Фигурные скобки Сопоставление предыдущего элемента не менее n раз.
{ n , m } Фигурные скобки Сопоставление предшествующего элемента от n до m раз.

Совпадение ноль или более раз (*)

Квантификатор(*) соответствует своему предыдущему элементу ноль или более раз. Например, следующая программа использует квантификатор * для сопоставления любой строки, оканчивающейся на Python:

import re

s = """CPython, IronPython, and JPython 
       are major Python's implementation"""

matches = re.finditer('\w*Python', s)

for match in matches:
    print(match)

В этом примере:

  • \w соответствует любому символу одного слова.
  • Таким образом, \w* соответствует нулю или более символам слова.
  • Таким образом, \w*Python соответствует любому нулю или более символам, за которыми следует строка Python.

В результате шаблон \w*Python соответствует CPython, IronPython, JPython и Python в строке:

<re.Match object; span=(0, 7), match='CPython'>
<re.Match object; span=(9, 19), match='IronPython'>
<re.Match object; span=(25, 32), match='JPython'>  
<re.Match object; span=(51, 57), match='Python'>

Совпадение один или несколько раз (+)

Квантификатор + соответствует своему предыдущему элементу один или несколько раз. Например, \d+ соответствует одной или нескольким цифрам.

В следующем примере квантификатор + используется для сопоставления одной или нескольких цифр в строке:

import re

s = "Python 3.10 was released in 2021"

matches = re.finditer('\d+', s)

for match in matches:
    print(match)

Выход:

<re.Match object; span=(7, 8), match='3'>
<re.Match object; span=(9, 11), match='10'>   
<re.Match object; span=(28, 32), match='2021'>

Совпадение ноль или один раз (?)

Квантификатор ? соответствует своему предыдущему элементу ноль или один раз.

В следующем примере квантификатор(?) используется для сопоставления color и colour:

import re

s = "What color / colour do you like?"

matches = re.finditer('colou?r', s)

for match in matches:
    print(match)

Выход:

<re.Match object; span=(5, 10), match='color'>
<re.Match object; span=(13, 19), match='colour'>

В этом примере u? соответствует нулю или одному символу u. Таким образом, colou?r соответствует как color, так и colour.

Соответствие ровно n раз: {n}

Квантификатор {n} соответствует своему предыдущему элементу ровно n раз, где n равно нулю или положительному целому числу.

Например, следующая программа использует квантификатор {n} для сопоставления строки времени в формате чч:мм:

import re

s = "It was 11:05 AM"

matches = re.finditer('\d{2}:\d{2}', s)

for match in matches:
    print(match)

Выход:

<re.Match object; span=(7, 12), match='11:05'>

В этом примере \d{2} соответствует ровно двум цифрам. Таким образом, \d{2}:\d{2} соответствует строке, которая начинается с двух цифр(двоеточие 🙂 и заканчивается двумя цифрами.

Соответствие не менее n раз: {n,}

Квантификатор {n,} соответствует своему предыдущему элементу как минимум n раз, где n равно нулю или положительному целому числу.

Например, следующая программа использует квантификатор {n, } для сопоставления строк даты в формате мд-гггг или мм-дд-гггг:

import re

s = "5-5-2021 or 05-05-2021 or 5/5/2021"

matches = re.finditer('\d{1,}-\d{1,}-\d{4}', s)

for match in matches:
    print(match)

Выход:

<re.Match object; span=(0, 8), match='5-5-2021'>
<re.Match object; span=(12, 22), match='05-05-2021'>

Соответствие n и m раз: {n,m}

Квантификатор {n,m} соответствует своему предыдущему элементу не менее n раз, но не более m раз, где n и m равны нулю или положительному целому числу. Например:

import re

s = "5-5-2021 or 05-05-2021 or 5/5/2021"

matches = re.finditer('\d{1,2}-\d{1,2}-\d{4}', s)

for match in matches:
    print(match)

Выход:

<re.Match object; span=(0, 8), match='5-5-2021'>
<re.Match object; span=(12, 22), match='05-05-2021'>

В этом примере шаблон \d{1,2} соответствует одной или двум цифрам. Таким образом, шаблон \d{1,2}-\d{1,2}-\d{4} соответствует строке даты в формате дм-гггг или дд-мм-гггг.

Похожие посты
Добавить комментарий

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