Квантификаторы регулярных выражений в Python
В этом уроке вы узнаете, как использовать квантификаторы регулярных выражений в Python, чтобы определить, сколько раз может повторяться символ или набор символов.
- Что такое квантификаторы регулярных выражений в Python?
- Совпадение ноль или более раз (*)
- Совпадение один или несколько раз (+)
- Совпадение ноль или один раз (?)
- Соответствие ровно n раз: {n}
- Соответствие не менее n раз: {n,}
- Соответствие n и m раз: {n,m}
Что такое квантификаторы регулярных выражений в 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} соответствует строке даты в формате дм-гггг или дд-мм-гггг.