Greedy vs. non-greedy porovnávání

Regular Expressions in Python

Maria Eugenia Inzaugarat

Data Scientist

Greedy vs. non-greedy porovnávání

  • Dva typy porovnávání:

    • Greedy
    • Non-greedy neboli lazy
  • Standardní kvantifikátory jsou ve výchozím stavu greedy: *, +, ?, {num, num}

Regular Expressions in Python

Greedy porovnávání

  • Greedy: porovná co nejvíce znaků

  • Vrátí nejdelší shodu

import re
re.match(r"\d+", "12345bcada")
<re.Match object; span=(0, 5), match='12345'>

Regular Expressions in Python

Greedy porovnávání

  • Provede backtracking při příliš mnoha shodách

  • Znaky uvolňuje postupně po jednom

import re
re.match(r".*hello", "xhelloxxxxxx")
<re.Match object; span=(0, 6), match='xhello'>

Regular Expressions in Python

Non-greedy porovnávání

  • Lazy: porovná co nejméně znaků
  • Vrátí nejkratší shodu
  • Přidejte ? ke greedy kvantifikátorům
import re
re.match(r"\d+?", "12345bcada")
<re.Match object; span=(0, 1), match='1'>

Regular Expressions in Python

Non-greedy porovnávání

  • Provede backtracking při příliš málo shodách

  • Znaky rozšiřuje postupně po jednom

import re
re.match(r".*?hello", "xhelloxxxxxx")
<re.Match object; span=(0, 6), match='xhello'>

Regular Expressions in Python

Pojďme si procvičit!

Regular Expressions in Python

Preparing Video For Download...