Matching greedy vs non-greedy

Espressioni regolari in Python

Maria Eugenia Inzaugarat

Data Scientist

Matching greedy vs non-greedy

  • Due tipi di matching:

    • Greedy
    • Non-greedy o lazy
  • I quantificatori standard sono greedy di default: *, +, ?, {num, num}

Espressioni regolari in Python

Matching greedy

  • Greedy: cattura più caratteri possibile

  • Restituisce la corrispondenza più lunga

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

Espressioni regolari in Python

Matching greedy

  • Fa backtracking se ha catturato troppo

  • Rinuncia a un carattere alla volta

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

Espressioni regolari in Python

Matching non-greedy

  • Lazy: cattura il minimo necessario
  • Restituisce la corrispondenza più corta
  • Aggiungi ? ai quantificatori greedy
import re
re.match(r"\d+?", "12345bcada")
<re.Match object; span=(0, 1), match='1'>

Espressioni regolari in Python

Matching non-greedy

  • Fa backtracking se ha catturato troppo poco

  • Espande di un carattere alla volta

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

Espressioni regolari in Python

Passiamo alla pratica!

Espressioni regolari in Python

Preparing Video For Download...