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.
\dSe potrivește cu o cifră. Echivalent cu
[0-9].\DSe potrivește cu un caracter care nu este cifră. Echivalent cu
[^0-9].\sSe potrivește cu un spațiu alb. Echivalent cu
[ \t-\r].\SSe potrivește cu un caracter care nu este spațiu alb. Echivalent cu
[^ \t-\r].\wSe potrivește cu „caractere de cuvânt” (doar ASCII). Echivalent cu
[A-Za-z0-9_].\WSe 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,\netc. nu sunt tratate special și vor fi echivalente cu literele literaler,netc. 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 Pythonetc.
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
matchsauNonedacă regex nu se potrivește. Acesta este echivalentul, pentru tiparul compilat, al funcțieimatchla 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 esteNone(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
matchsauNonedacă nicio poziție nu se potrivește. Acesta este echivalentul, pentru tiparul compilat, al funcțieisearch()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 esteNone(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.
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
Nonedacă nu se potrivește. Aceasta este scurtătura la nivel de modul:re.match(regex_str, string)este echivalent cure.compile(regex_str).match(string).Același obiect match este returnat și de
search(), de metodeleregex.match()/regex.search()ale tiparului compilat și este transmis funcției de înlocuire folosite desub().