re — eenvoudige reguliere expressies¶
Deze module implementeert bewerkingen met reguliere expressies. De ondersteunde syntaxis voor reguliere expressies is een deelverzameling van de re-module van CPython (en is feitelijk een deelverzameling van de uitgebreide reguliere expressies van POSIX).
De ondersteunde operatoren en speciale reeksen zijn:
.Komt overeen met elk teken.
[...]Komt overeen met een verzameling tekens. Individuele tekens en bereiken worden ondersteund, inclusief genegeerde verzamelingen (bijv.
[^a-c]).^Komt overeen met het begin van de tekenreeks.
$Komt overeen met het einde van de tekenreeks.
?Komt nul of een keer overeen met het voorgaande subpatroon.
*Komt nul of meer keren overeen met het voorgaande subpatroon.
+Komt een of meer keren overeen met het voorgaande subpatroon.
??Niet-gulzige versie van
?, komt nul of een keer overeen, met voorkeur voor nul.*?Niet-gulzige versie van
*, komt nul of meer keren overeen, met voorkeur voor de kortste overeenkomst.+?Niet-gulzige versie van
+, komt een of meer keren overeen, met voorkeur voor de kortste overeenkomst.|Komt overeen met ofwel het linker- ofwel het rechter-subpatroon van deze operator.
(...)Groepering. Elke groep is vastleggend (een door de groep vastgelegde subtekenreeks kan worden benaderd met de methode
match.group()).(?:...)Niet-vastleggende groepering. Elke groep wordt vergeleken volgens dezelfde regels als gewone groepering, maar maakt geen deel uit van het match-object.
\dKomt overeen met een cijfer. Equivalent aan
[0-9].\DKomt overeen met een niet-cijfer. Equivalent aan
[^0-9].\sKomt overeen met witruimte. Equivalent aan
[ \t-\r].\SKomt overeen met niet-witruimte. Equivalent aan
[^ \t-\r].\wKomt overeen met “woordtekens” (alleen ASCII). Equivalent aan
[A-Za-z0-9_].\WKomt overeen met niet-“woordtekens” (alleen ASCII). Equivalent aan
[^A-Za-z0-9_].\Escape-teken. Elk ander teken dat op de backslash volgt, behalve de hierboven genoemde, wordt letterlijk genomen. Bijvoorbeeld,
\*is equivalent aan het letterlijke*(en wordt niet behandeld als de operator*). Merk op dat\r,\n, enz. niet speciaal worden behandeld en equivalent zijn aan de letterlijke lettersr,n, enz. Hierdoor wordt het niet aanbevolen om ruwe Python-tekenreeksen (r"") te gebruiken voor reguliere expressies. Bijvoorbeeld,r"\r\n"is, wanneer het als reguliere expressie wordt gebruikt, equivalent aan"rn". Om een CR-teken gevolgd door LF te matchen, gebruik je"\r\n".
NIET ONDERSTEUND:
geteld herhalen (
{m,n})benoemde groepen (
(?P<name>...))meer geavanceerde asserties (
\b,\B)speciale tekenescapes zoals
\r,\n- gebruik in plaats daarvan de eigen escaping van Pythonenz.
Voorbeeld:
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', '', '']
Functies¶
- re.compile(regex_str: str, flags: int = 0) 'regex'¶
Compileert een reguliere expressie en geeft een regex-object terug.
- re.search(regex_str: str, string: str) 'match | None'¶
Compileert regex_str en zoekt het in een string. In tegenstelling tot
matchdoorzoekt dit de tekenreeks naar de eerste positie die overeenkomt met de regex (die nog steeds 0 kan zijn als de regex verankerd is).
- re.sub(regex_str: str, replace: str | Callable, string: str, count: int = 0, flags: int = 0, /) str¶
Compileert regex_str en zoekt ernaar in string, vervangt alle overeenkomsten door replace en geeft de nieuwe tekenreeks terug.
replace kan een tekenreeks of een functie zijn. Als het een tekenreeks is, kunnen escape-reeksen van de vorm
\<number>en\g<number>worden gebruikt om uit te breiden naar de bijbehorende groep (of een lege tekenreeks voor niet-overeenkomende groepen). Als replace een functie is, moet deze een enkel argument aannemen (de overeenkomst) en een vervangende tekenreeks teruggeven.Als count is opgegeven en niet nul is, stopt de vervanging nadat dit aantal vervangingen is uitgevoerd. Het argument flags wordt genegeerd.
Regex-objecten¶
Een gecompileerde reguliere expressie. Instanties van deze klasse worden aangemaakt met re.compile().
- class re.regex
Gecompileerd reguliere-expressie-object dat wordt teruggegeven door
re.compile().- match(string: str, pos: int = 0, endpos: int | None = None) 'match | None'¶
Past deze gecompileerde regex toe op string, verankerd aan het begin van het zoekgebied, en geeft een
match-object terug, ofNoneals de regex niet overeenkomt. Dit is het equivalent op patroonniveau vanmatchop moduleniveau, en is veel efficiënter wanneer hetzelfde patroon op meerdere tekenreeksen wordt toegepast.De optionele parameter pos geeft een index in string aan waar het zoeken moet beginnen; de standaardwaarde is
0. Dit is niet helemaal equivalent aan het slicen van de tekenreeks; het patroonteken'^'komt overeen aan het echte begin van de tekenreeks en op posities direct na een newline, maar niet noodzakelijk op de index waar het zoeken moet beginnen.De optionele parameter endpos beperkt hoe ver string wordt doorzocht; het is alsof de tekenreeks endpos tekens lang is, zodat alleen de tekens van pos tot
endpos - 1worden doorzocht. Als endpos gelijk is aanNone(de standaardwaarde) wordt de hele tekenreeks doorzocht.
- search(string: str, pos: int = 0, endpos: int | None = None) 'match | None'¶
Doorloopt string op zoek naar de eerste locatie waar deze gecompileerde regex een overeenkomst oplevert, en geeft een
match-object terug, ofNoneals geen enkele positie overeenkomt. Dit is het equivalent op patroonniveau van de functiesearch()op moduleniveau, en is veel efficiënter wanneer hetzelfde patroon op meerdere tekenreeksen wordt toegepast.De optionele parameter pos geeft een index in string aan waar het zoeken moet beginnen; de standaardwaarde is
0. Dit is niet helemaal equivalent aan het slicen van de tekenreeks; het patroonteken'^'komt overeen aan het echte begin van de tekenreeks en op posities direct na een newline, maar niet noodzakelijk op de index waar het zoeken moet beginnen.De optionele parameter endpos beperkt hoe ver string wordt doorzocht; het is alsof de tekenreeks endpos tekens lang is, zodat alleen de tekens van pos tot
endpos - 1worden doorzocht. Als endpos gelijk is aanNone(de standaardwaarde) wordt de hele tekenreeks doorzocht.
- sub(replace: str | Callable, string: str, count: int = 0, flags: int = 0, /) str¶
Zoekt naar deze gecompileerde regex in string, vervangt alle overeenkomsten door replace en geeft de nieuwe tekenreeks terug. Dit is het equivalent op patroonniveau van de functie
sub()op moduleniveau, en is veel efficiënter wanneer hetzelfde patroon op meerdere tekenreeksen wordt toegepast.replace kan een tekenreeks of een functie zijn. Als het een tekenreeks is, kunnen escape-reeksen van de vorm
\<number>en\g<number>worden gebruikt om uit te breiden naar de bijbehorende groep (of een lege tekenreeks voor niet-overeenkomende groepen). Als replace een functie is, moet deze een enkel argument aannemen (de overeenkomst) en een vervangende tekenreeks teruggeven.Als count is opgegeven en niet nul is, stopt de vervanging nadat dit aantal vervangingen is uitgevoerd. Het argument flags wordt genegeerd.
Match-objecten¶
Een match-object bevat het resultaat van een geslaagde overeenkomst.
- class re.match(regex_str: str, string: str)¶
Matcht regex_str tegen string, verankerd aan het begin van de tekenreeks, en geeft een match-object terug, of
Noneals het niet overeenkomt. Dit is de snelkoppeling op moduleniveau:re.match(regex_str, string)is equivalent aanre.compile(regex_str).match(string).Hetzelfde match-object wordt ook teruggegeven door
search(), door de methodenregex.match()/regex.search()op gecompileerd patroon, en wordt doorgegeven aan de vervangingsfunctie die doorsub()wordt gebruikt.