Чередование регулярных выражений в Python с примерами

Содержание

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

Чтобы представить чередование в регулярных выражениях, используйте оператор вертикальной черты(|). Он называется чередованием и похож на оператор or в Python.

Следующее регулярное выражение использует чередование для соответствия либо сложной, либо простой строке литерала:

'simple|complex'

Например, следующая программа использует приведенное выше регулярное выражение для сопоставления простой или сложной строки литерала:

import re

s = 'simple is better than complex'
pattern = r'simple|complex'

matches = re.findall(pattern,s)
print(matches)

Выход:

['simple', 'complex']

Пример чередования регулярных выражений Python

Давайте рассмотрим пример использования чередования регулярных выражений.

Сопоставление времени в формате чч: мм с помощью чередование регулярных выражений Python.

Чтобы сопоставить строку времени в формате чч:мм, вы можете объединить набор символов \d с квантификаторами {}:

'\d{2}:\d{2}'

В этом шаблоне:

  • \d{2} соответствует двум цифрам;
  • : соответствует символу двоеточия;
  • \d{2} соответствует двум цифрам.

Однако правило \d{2} также соответствует числу, которое не является допустимым часом или минутой, например 99. Чтобы исправить это, вы можете использовать чередование регулярных выражений.

Если действительный час находится в диапазоне от 01 до 23, вы можете использовать следующий шаблон для сопоставления часовой части:

[01]\d|2[0-3]

В этом шаблоне:

  • [01] соответствует одной цифре 0 или 1;
  • \d соответствует одной цифре от 0 до 9;
  • [01]\d соответствует 00, 01–19;
  • 2 соответствует цифре 2;
  • [0-3] соответствует одной цифре от 0 до 3, включая 0, 1, 2, 3:
  • 2[0-3] соответствует двум цифрам: 20, 21, 22 и 23.

Следовательно, [01]\d|2[0-3] соответствует двум цифрам от 00 до 23.

Поскольку действительные минуты находятся в диапазоне от 00 до 59, для сопоставления можно использовать следующий шаблон:

[0-5]\d

Следующее регулярное выражение объединяет два приведенных выше правила для сопоставления времени в формате чч:мм:

'[01]\d|2[0-3]:[0-5]\d'

Однако это регулярное выражение не будет работать должным образом. Например:

import re

s = '09:30 30:61 22:30 25:99'
pattern = r'[01]\d|2[0-3]:[0-5]\d'

matches = re.finditer(pattern, s)
for match in matches:
    print(match.group())

Выход:

09
22:30

В этом примере механизм регулярных выражений обрабатывает шаблон [01]\d|2[0-3]:[0-5]\d как две основные части, разделенные чередованием:

[01]\d
OR
2[0-3]):([0-5]\d)

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

([01]\d|2[0-3]):[0-5]\d

Теперь программа работает как положено:

import re

s = '09:30 30:61 22:30 25:99'
pattern = r'([01]\d|2[0-3]):[0-5]\d'

matches = re.finditer(pattern, s)
for match in matches:
    print(match.group())

Выход:

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

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