Нежадные (ленивые) квантификаторы регулярных выражений в Python
В этом уроке вы узнаете о 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"