re.compile() în Python

Compilează o expresie regulată într-un obiect Pattern, refolosibil și mai ușor de citit.

Sintaxă
model = re.compile(expresie, flags=0)

Ce face re.compile()

re.compile() transformă textul expresiei într-un obiect re.Pattern, cu aceleași metode ca modulul: search, match, fullmatch, findall, finditer, sub, subn, split. Atributele pattern, flags și groups descriu modelul.

Modulul re păstrează oricum într-un cache modelele folosite recent, deci câștigul de viteză este mic, dar codul devine mai clar când același model este folosit în mai multe locuri. re.purge() golește acest cache.

Flag-urile sunt membri ai enumerării re.RegexFlag și se combină cu |. Cu re.VERBOSE poți scrie modelul pe mai multe rânduri, cu spații și comentarii. Metoda Pattern.scanner() există, dar nu este documentată oficial; nu te baza pe ea.

Parametri

Parametru Descriere
expresie Textul expresiei regulate.
flags Opțional. Flag-uri (re.I | re.M…).

Ce returnează

Un obiect re.Pattern.

Exemple

Exemplul 1: Model refolosit

import re
NR_AUTO = re.compile(r"\b[A-Z]{1,2} \d{2,3} [A-Z]{3}\b")
for text in ["Mașina IS 12 ABC a plecat", "B 123 XYZ și CJ 07 DEF", "fără număr"]:
    print(NR_AUTO.findall(text))
print(NR_AUTO.pattern, NR_AUTO.groups)

Rezultat

['IS 12 ABC']
['B 123 XYZ', 'CJ 07 DEF']
[]
\b[A-Z]{1,2} \d{2,3} [A-Z]{3}\b 0

Exemplul 2: VERBOSE și flag-uri

import re
DATA = re.compile(r'''
    (?P<zi>\d{1,2})      # ziua
    [./-]
    (?P<luna>\d{1,2})    # luna
    [./-]
    (?P<an>\d{4})        # anul
''', re.VERBOSE)
m = DATA.search("Născut pe 5.03.1998 la Iași")
print(m.groupdict())
print(re.I | re.M, type(re.I).__name__)
re.purge()

Rezultat

{'zi': '5', 'luna': '03', 'an': '1998'}
re.IGNORECASE|re.MULTILINE RegexFlag

Greșeli frecvente

  • Compilezi modelul în interiorul unei bucle, la fiecare pas. Compilează-l o singură dată, în afara buclei, de obicei ca o constantă la începutul modulului.

Comenzi înrudite