В этом уроке вы узнаете о Regex Non-Greedy: нежадных (или ленивых) квантификаторах регулярных выражений, которые соответствуют своим предыдущим элементам как можно меньше раз.
Что такое нежадные (или ленивые) квантификаторы регулярных выражений?
Квантификаторы позволяют сопоставлять предыдущие элементы несколько раз и работают в одном из двух режимов: жадном и нежадном (ленивом). В зависимости от режима их называют жадными и нежадными квантификаторами.
По умолчанию квантификаторы работают в жадном режиме. Это означает, что жадные квантификаторы будут максимально соответствовать своим предыдущим элементам, чтобы вернуться к максимально возможному совпадению.
С другой стороны, нежадные квантификаторы будут совпадать как можно меньше, чтобы вернуть наименьшее возможное совпадение. нежадные квантификаторы являются противоположностью жадных.
Чтобы превратить жадные квантификаторы в нежадные, к ним добавляется дополнительный вопросительный знак(?). В следующей таблице показаны жадные и соответствующие им нежадные квантификаторы:
| Жадный квантификатор | Ленивый квантификатор | Значение |
|---|---|---|
| * | *? | Сопоставляет предыдущий элемент ноль или более раз. |
| + | +? | Сопоставляет предыдущий элемент один или несколько раз. |
| ? | ?? | Сопоставляет предшествующий элемент ноль или один раз. |
| { н } | {н}? | Сопоставление предыдущего элемента ровно n раз. |
| { н ,} | {н,}? | Сопоставление не менее n раз. |
| { п , м } | { н , м }? | От n до m раз. |
Пример нежадных квантификаторов регулярных выражений в Python
В следующей программе используется нежадный квантификатор (+?) для сопоставления текста в кавычках («») элемента button:
import re
s="<button type="submit" class="btn">Send</button>"
pattern = '".+?"'
matches = re.finditer(pattern, s)
for match in matches:
print(match.group())
Выход:
"submit" "btn"
