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.

\d

Komt overeen met een cijfer. Equivalent aan [0-9].

\D

Komt overeen met een niet-cijfer. Equivalent aan [^0-9].

\s

Komt overeen met witruimte. Equivalent aan [ \t-\r].

\S

Komt overeen met niet-witruimte. Equivalent aan [^ \t-\r].

\w

Komt overeen met “woordtekens” (alleen ASCII). Equivalent aan [A-Za-z0-9_].

\W

Komt 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 letters r, 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 Python

  • enz.

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 match doorzoekt 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, of None als de regex niet overeenkomt. Dit is het equivalent op patroonniveau van match 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 - 1 worden doorzocht. Als endpos gelijk is aan None (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, of None als geen enkele positie overeenkomt. Dit is het equivalent op patroonniveau van de functie search() 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 - 1 worden doorzocht. Als endpos gelijk is aan None (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.

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

Splitst een string met behulp van een regex. Als max_split is opgegeven, geeft dit het maximale aantal uit te voeren splitsingen aan. Geeft een lijst van tekenreeksen terug (er kunnen tot max_split+1 elementen zijn als het is opgegeven).

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 None als het niet overeenkomt. Dit is de snelkoppeling op moduleniveau: re.match(regex_str, string) is equivalent aan re.compile(regex_str).match(string).

Hetzelfde match-object wordt ook teruggegeven door search(), door de methoden regex.match() / regex.search() op gecompileerd patroon, en wordt doorgegeven aan de vervangingsfunctie die door sub() wordt gebruikt.

group(index: int) str

Geeft de overeenkomende (sub)tekenreeks terug. index is 0 voor de volledige overeenkomst, 1 en hoger voor elke vastleggende groep. Alleen numerieke groepen worden ondersteund.