Чередование регулярных выражений в Python с примерами
- Что такое чередование регулярных выражений в Python?
- Пример чередования регулярных выражений Python
- Сопоставление времени в формате чч: мм с помощью чередование регулярных выражений 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