re — expresii regulate simple

Acest modul implementează operații cu expresii regulate. Sintaxa de expresii regulate acceptată este o submulțime a modulului re din CPython (și de fapt este o submulțime a expresiilor regulate extinse POSIX).

Operatorii și secvențele speciale acceptate sunt:

.

Se potrivește cu orice caracter.

[...]

Se potrivește cu un set de caractere. Sunt acceptate atât caracterele individuale, cât și intervalele, inclusiv seturile negate (de exemplu [^a-c]).

^

Se potrivește cu începutul șirului.

$

Se potrivește cu sfârșitul șirului.

?

Se potrivește cu zero sau una dintre aparițiile subtiparului precedent.

*

Se potrivește cu zero sau mai multe apariții ale subtiparului precedent.

+

Se potrivește cu una sau mai multe apariții ale subtiparului precedent.

??

Versiunea non-lacomă a ?, se potrivește cu zero sau una, cu preferință pentru zero.

*?

Versiunea non-lacomă a *, se potrivește cu zero sau mai multe, cu preferință pentru cea mai scurtă potrivire.

+?

Versiunea non-lacomă a +, se potrivește cu una sau mai multe, cu preferință pentru cea mai scurtă potrivire.

|

Se potrivește fie cu subtiparul din stânga, fie cu cel din dreapta acestui operator.

(...)

Grupare. Fiecare grup este de captură (un subșir capturat poate fi accesat cu metoda match.group()).

(?:...)

Grupare fără captură. Fiecare grup este potrivit folosind aceleași reguli ca gruparea obișnuită, dar nu va face parte din obiectul match.

\d

Se potrivește cu o cifră. Echivalent cu [0-9].

\D

Se potrivește cu un caracter care nu este cifră. Echivalent cu [^0-9].

\s

Se potrivește cu un spațiu alb. Echivalent cu [ \t-\r].

\S

Se potrivește cu un caracter care nu este spațiu alb. Echivalent cu [^ \t-\r].

\w

Se potrivește cu „caractere de cuvânt” (doar ASCII). Echivalent cu [A-Za-z0-9_].

\W

Se potrivește cu caractere care nu sunt „caractere de cuvânt” (doar ASCII). Echivalent cu [^A-Za-z0-9_].

\

Caracter de escapare. Orice alt caracter care urmează după backslash, cu excepția celor enumerate mai sus, este interpretat literal. De exemplu, \* este echivalent cu * literal (nu este tratat ca operatorul *). De reținut că \r, \n etc. nu sunt tratate special și vor fi echivalente cu literele literale r, n etc. Din acest motiv, nu se recomandă folosirea șirurilor Python brute (r"") pentru expresii regulate. De exemplu, r"\r\n" folosit ca expresie regulată este echivalent cu "rn". Pentru a potrivi caracterul CR urmat de LF, folosiți "\r\n".

NU ESTE ACCEPTAT:

  • repetiții numărate ({m,n})

  • grupuri denumite ((?P<name>...))

  • aserțiuni mai avansate (\b, \B)

  • escapări de caractere speciale precum \r, \n - folosiți în schimb escaparea proprie a Python

  • etc.

Exemplu:

import re

# As re doesn't support escapes itself, use of r"" strings is not
# recommended.
regex = re.compile("[\r\n]")

regex.split("line1\rline2\nline3\r\n")

# Result:
# ['line1', 'line2', 'line3', '', '']

Funcții

re.compile(regex_str: str, flags: int = 0) 'regex'

Compilează expresia regulată și returnează un obiect regex.

re.search(regex_str: str, string: str) 'match | None'

Compilează regex_str și îl caută într-un string. Spre deosebire de match, aceasta va căuta în șir prima poziție care se potrivește cu regex (care poate fi totuși 0 dacă regex este ancorat).

re.sub(regex_str: str, replace: str | Callable, string: str, count: int = 0, flags: int = 0, /) str

Compilează regex_str și îl caută în string, înlocuind toate potrivirile cu replace și returnând noul șir.

replace poate fi un șir sau o funcție. Dacă este un șir, atunci secvențe de escapare de forma \<number> și \g<number> pot fi folosite pentru a se extinde la grupul corespunzător (sau la un șir gol pentru grupurile nepotrivite). Dacă replace este o funcție, atunci aceasta trebuie să accepte un singur argument (potrivirea) și ar trebui să returneze un șir de înlocuire.

Dacă count este specificat și diferit de zero, atunci substituția se va opri după efectuarea acestui număr de substituții. Argumentul flags este ignorat.

Obiecte regex

Expresie regulată compilată. Instanțele acestei clase sunt create folosind re.compile().

class re.regex

Obiect de expresie regulată compilată returnat de re.compile().

match(string: str, pos: int = 0, endpos: int | None = None) 'match | None'

Aplică acest regex compilat pe string, ancorat la începutul regiunii de căutare, și returnează un obiect match sau None dacă regex nu se potrivește. Acesta este echivalentul, pentru tiparul compilat, al funcției match la nivel de modul și este mult mai eficient atunci când același tipar este aplicat mai multor șiruri.

Parametrul opțional pos indică un index în string de unde să înceapă căutarea; valoarea implicită este 0. Acest lucru nu este complet echivalent cu secționarea șirului; caracterul de tipar '^' se potrivește la începutul real al șirului și la pozițiile imediat după o linie nouă, dar nu neapărat la indexul de unde începe căutarea.

Parametrul opțional endpos limitează cât de departe este căutat string; va fi ca și cum șirul ar avea endpos caractere lungime, astfel încât sunt căutate doar caracterele de la pos până la endpos - 1. Dacă endpos este None (valoarea implicită), este căutat întregul șir.

search(string: str, pos: int = 0, endpos: int | None = None) 'match | None'

Parcurge string căutând prima locație unde acest regex compilat produce o potrivire și returnează un obiect match sau None dacă nicio poziție nu se potrivește. Acesta este echivalentul, pentru tiparul compilat, al funcției search() la nivel de modul și este mult mai eficient atunci când același tipar este aplicat mai multor șiruri.

Parametrul opțional pos indică un index în string de unde să înceapă căutarea; valoarea implicită este 0. Acest lucru nu este complet echivalent cu secționarea șirului; caracterul de tipar '^' se potrivește la începutul real al șirului și la pozițiile imediat după o linie nouă, dar nu neapărat la indexul de unde începe căutarea.

Parametrul opțional endpos limitează cât de departe este căutat string; va fi ca și cum șirul ar avea endpos caractere lungime, astfel încât sunt căutate doar caracterele de la pos până la endpos - 1. Dacă endpos este None (valoarea implicită), este căutat întregul șir.

sub(replace: str | Callable, string: str, count: int = 0, flags: int = 0, /) str

Caută acest regex compilat în string, înlocuind toate potrivirile cu replace, și returnează noul șir. Acesta este echivalentul, pentru tiparul compilat, al funcției sub() la nivel de modul și este mult mai eficient atunci când același tipar este aplicat mai multor șiruri.

replace poate fi un șir sau o funcție. Dacă este un șir, atunci secvențe de escapare de forma \<number> și \g<number> pot fi folosite pentru a se extinde la grupul corespunzător (sau la un șir gol pentru grupurile nepotrivite). Dacă replace este o funcție, atunci aceasta trebuie să accepte un singur argument (potrivirea) și ar trebui să returneze un șir de înlocuire.

Dacă count este specificat și diferit de zero, atunci substituția se va opri după efectuarea acestui număr de substituții. Argumentul flags este ignorat.

split(string: str, max_split: int = -1, /) List[str]

Împarte un string folosind regex. Dacă este dat max_split, acesta specifică numărul maxim de împărțiri de efectuat. Returnează o listă de șiruri (pot exista până la max_split+1 elemente dacă este specificat).

Obiecte match

Un obiect match conține rezultatul unei potriviri reușite.

class re.match(regex_str: str, string: str)

Potrivește regex_str cu string, ancorat la începutul șirului, și returnează un obiect match sau None dacă nu se potrivește. Aceasta este scurtătura la nivel de modul: re.match(regex_str, string) este echivalent cu re.compile(regex_str).match(string).

Același obiect match este returnat și de search(), de metodele regex.match() / regex.search() ale tiparului compilat și este transmis funcției de înlocuire folosite de sub().

group(index: int) str

Returnează (sub)șirul potrivit. index este 0 pentru întreaga potrivire, 1 și mai mare pentru fiecare grup de captură. Sunt acceptate doar grupurile numerice.