Python - Reguliere expressies
Een gewone uitdrukking is een speciale reeks tekens waarmee u andere tekenreeksen of reeksen tekenreeksen kunt matchen of vinden, met behulp van een gespecialiseerde syntaxis die in een patroon wordt vastgehouden. Reguliere expressies worden veel gebruikt in de UNIX-wereld.
De Python-module re biedt volledige ondersteuning voor Perl-achtige reguliere expressies in Python. De re-module roept de uitzondering re.error op als er een fout optreedt tijdens het compileren of gebruiken van een reguliere expressie.
We zouden twee belangrijke functies behandelen, die zouden worden gebruikt om reguliere expressies af te handelen. Maar eerst een klein ding:er zijn verschillende tekens, die een speciale betekenis zouden hebben als ze in reguliere expressies worden gebruikt. Om verwarring te voorkomen bij het omgaan met reguliere expressies, zouden we Raw Strings gebruiken als r'expression' .
De wedstrijd Functie
Deze functie probeert het RE patroon . te matchen naar string met optionele vlaggen .
Hier is de syntaxis voor deze functie −
re.match(pattern, string, flags=0)
Hier is de beschrijving van de parameters −
Sr.nr. | Parameter en beschrijving |
---|---|
1 | patroon Dit is de reguliere expressie die moet worden vergeleken. |
2 | tekenreeks Dit is de tekenreeks, die zou worden gezocht om overeen te komen met het patroon aan het begin van de tekenreeks. |
3 | vlaggen U kunt verschillende vlaggen specificeren met bitsgewijze OR (|). Dit zijn modifiers, die in de onderstaande tabel worden vermeld. |
De re.match functie retourneert een overeenkomst bezwaar bij succes, Geen op mislukking. We gebruikengroup(num) of groepen() functie van match object om een overeenkomende uitdrukking te krijgen.
Sr.nr. | Overeenkomen met objectmethode en beschrijving |
---|---|
1 | groep(num=0) Deze methode retourneert de volledige overeenkomst (of specifiek subgroepnummer) |
2 | groepen() Deze methode retourneert alle overeenkomende subgroepen in een tuple (leeg als er geen waren) |
Voorbeeld
Live demo#!/usr/bin/python import re line = "Cats are smarter than dogs" matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I) if matchObj: print "matchObj.group() : ", matchObj.group() print "matchObj.group(1) : ", matchObj.group(1) print "matchObj.group(2) : ", matchObj.group(2) else: print "No match!!"
Wanneer de bovenstaande code wordt uitgevoerd, levert dit het volgende resultaat op −
matchObj.group() : Cats are smarter than dogs matchObj.group(1) : Cats matchObj.group(2) : smarter
De zoekopdracht Functie
Deze functie zoekt naar het eerste voorkomen van RE patroon binnen tekenreeks met optionele vlaggen .
Hier is de syntaxis voor deze functie −
re.search(pattern, string, flags=0)
Hier is de beschrijving van de parameters −
Sr.nr. | Parameter en beschrijving |
---|---|
1 | patroon Dit is de reguliere expressie die moet worden vergeleken. |
2 | tekenreeks Dit is de tekenreeks, die zou worden gezocht om overal in de tekenreeks overeen te komen met het patroon. |
3 | vlaggen U kunt verschillende vlaggen specificeren met bitsgewijze OR (|). Dit zijn modifiers, die in de onderstaande tabel worden vermeld. |
Het onderzoek functie retourneert een overeenkomst bezwaar bij succes, geen op mislukking. We gebruiken group(num) of groepen() functie van match object om een overeenkomende uitdrukking te krijgen.
Sr.nr. | Overeenkomen met objectmethoden en beschrijving |
---|---|
1 | groep(num=0) Deze methode retourneert de volledige overeenkomst (of specifiek subgroepnummer) |
2 | groepen() Deze methode retourneert alle overeenkomende subgroepen in een tuple (leeg als er geen waren) |
Voorbeeld
Live demo#!/usr/bin/python import re line = "Cats are smarter than dogs"; searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I) if searchObj: print "searchObj.group() : ", searchObj.group() print "searchObj.group(1) : ", searchObj.group(1) print "searchObj.group(2) : ", searchObj.group(2) else: print "Nothing found!!"
Wanneer de bovenstaande code wordt uitgevoerd, levert dit het volgende resultaat op −
searchObj.group() : Cats are smarter than dogs searchObj.group(1) : Cats searchObj.group(2) : smarter
Overeenkomen versus zoeken
Python biedt twee verschillende primitieve bewerkingen op basis van reguliere expressies:match controleert alleen op een overeenkomst aan het begin van de tekenreeks, terwijl zoeken controleert overal in de string op een overeenkomst (dit is wat Perl standaard doet).
Voorbeeld
Live demo#!/usr/bin/python import re line = "Cats are smarter than dogs"; matchObj = re.match( r'dogs', line, re.M|re.I) if matchObj: print "match --> matchObj.group() : ", matchObj.group() else: print "No match!!" searchObj = re.search( r'dogs', line, re.M|re.I) if searchObj: print "search --> searchObj.group() : ", searchObj.group() else: print "Nothing found!!"
Wanneer de bovenstaande code wordt uitgevoerd, levert dit het volgende resultaat op −
No match!! search --> searchObj.group() : dogs
Zoeken en vervangen
Een van de belangrijkste re methoden die reguliere expressies gebruiken is sub .
Syntaxis
re.sub(pattern, repl, string, max=0)
Deze methode vervangt alle exemplaren van het RE patroon in tekenreeks met repl , waarbij alle vermeldingen worden vervangen, tenzij max mits. Deze methode retourneert een gewijzigde tekenreeks.
Voorbeeld
Live demo#!/usr/bin/python import re phone = "2004-959-559 # This is Phone Number" # Delete Python-style comments num = re.sub(r'#.*$', "", phone) print "Phone Num : ", num # Remove anything other than digits num = re.sub(r'\D', "", phone) print "Phone Num : ", num
Wanneer de bovenstaande code wordt uitgevoerd, levert dit het volgende resultaat op −
Phone Num : 2004-959-559 Phone Num : 2004959559
Reguliere expressie-modifiers:optievlaggen
Letterlijke uitdrukkingen voor reguliere expressies kunnen een optionele modifier bevatten om verschillende aspecten van matching te regelen. De modifiers worden gespecificeerd als een optionele vlag. U kunt meerdere modifiers opgeven met behulp van exclusieve OR (|), zoals eerder getoond en kan worden weergegeven door een van deze −
Sr.nr. | Modificatie en beschrijving |
---|---|
1 | re.I Voert hoofdletterongevoelige overeenkomsten uit. |
2 | re.L Interpreteert woorden volgens de huidige landinstelling. Deze interpretatie beïnvloedt de alfabetische groep (\w en \W), evenals het gedrag van de woordgrens (\b en \B). |
3 | re.M Zorgt ervoor dat $ overeenkomt met het einde van een regel (niet alleen het einde van de tekenreeks) en zorgt ervoor dat ^ overeenkomt met het begin van elke regel (niet alleen het begin van de tekenreeks). |
4 | re.S Zorgt ervoor dat een punt (punt) overeenkomt met elk teken, inclusief een nieuwe regel. |
5 | re.U Interpreteert letters volgens de Unicode-tekenset. Deze vlag beïnvloedt het gedrag van \w, \W, \b, \B. |
6 | re.X Staat een "leukere" syntaxis voor reguliere expressies toe. Het negeert witruimte (behalve binnen een set [] of wanneer ontsnapt door een backslash) en behandelt # zonder escapecodes als een commentaarmarkering. |
Reguliere expressiepatronen
Behalve voor controletekens, (+ ? . * ^ $ ( ) [ ] { } | \) , alle karakters komen overeen met zichzelf. U kunt ontsnappen aan een controleteken door er een backslash voor te zetten.
De volgende tabel geeft een overzicht van de syntaxis van reguliere expressies die beschikbaar is in Python −
Sr.nr. | Patroon en beschrijving |
---|---|
1 | ^ Komt overeen met het begin van de regel. |
2 | $ Komt overeen met het einde van de regel. |
3 | . Komt overeen met elk afzonderlijk teken behalve newline. Door de m-optie te gebruiken, kan het ook overeenkomen met de nieuwe regel. |
4 | [...] Komt overeen met elk afzonderlijk teken tussen haakjes. |
5 | [^...] Komt overeen met elk afzonderlijk teken dat niet tussen haakjes staat |
6 | re* Komt overeen met 0 of meer keren dat een voorgaande uitdrukking voorkomt. |
7 | re+ Komt overeen met 1 of meer exemplaren van de voorgaande uitdrukking. |
8 | re? Komt overeen met 0 of 1 instantie van voorgaande uitdrukking. |
9 | re{ n} Komt exact n aantal keren overeen met de voorgaande uitdrukking. |
10 | re{ n,} Komt overeen met n of meer keren dat een voorgaande uitdrukking voorkomt. |
11 | re{ n, m} Komt overeen met ten minste n en maximaal m voorvallen van de voorgaande uitdrukking. |
12 | een| b Komt overeen met a of b. |
13 | (her) Groepeert reguliere expressies en onthoudt overeenkomende tekst. |
14 | (?imx) Schakelt tijdelijk de i-, m- of x-opties in een reguliere expressie in. Als tussen haakjes staat, wordt alleen dat gebied beïnvloed. |
15 | (?-imx) Schakelt tijdelijk de i-, m- of x-opties uit binnen een reguliere expressie. Als tussen haakjes staat, wordt alleen dat gebied beïnvloed. |
16 | (?:re) Groepeert reguliere expressies zonder overeenkomende tekst te onthouden. |
17 | (?imx:re) Schakelt tijdelijk de opties i, m of x tussen haakjes in. |
18 | (?-imx:re) Schakelt de opties i, m of x tussen haakjes tijdelijk uit. |
19 | (?#...) Commentaar. |
20 | (?=re) Specificeert positie met behulp van een patroon. Heeft geen bereik. |
21 | (?! re) Specificeert positie met behulp van patroonnegatie. Heeft geen bereik. |
22 | (?> opnieuw) Komt overeen met onafhankelijk patroon zonder terug te keren. |
23 | \w Komt overeen met woordtekens. |
24 | \W Komt overeen met niet-woordtekens. |
25 | \s Komt overeen met witruimte. Gelijk aan [\t\n\r\f]. |
26 | \S Komt overeen met niet-witruimte. |
27 | \d Komt overeen met cijfers. Gelijk aan [0-9]. |
28 | \D Komt overeen met niet-cijfers. |
29 | \A Komt overeen met het begin van de tekenreeks. |
30 | \Z Komt overeen met het einde van de tekenreeks. Als er een nieuwe regel bestaat, komt deze overeen net voor de nieuwe regel. |
31 | \z Komt overeen met het einde van de tekenreeks. |
32 | \G Komt overeen met het punt waar de laatste wedstrijd eindigde. |
33 | \b Komt overeen met woordgrenzen buiten haakjes. Komt overeen met backspace (0x08) binnen haakjes. |
34 | \B Komt overeen met niet-woordgrenzen. |
35 | \n, \t, enz. Komt overeen met nieuwe regels, regelterugloop, tabs, enz. |
36 | \1...\9 Komt overeen met de n-de gegroepeerde subuitdrukking. |
37 | \10 Komt overeen met de n-de gegroepeerde subuitdrukking als deze al overeenkomt. Anders verwijst naar de octale weergave van een tekencode. |
Voorbeelden van reguliere expressie
Letterlijke tekens
Sr.nr. | Voorbeeld en beschrijving |
---|---|
1 | python Overeenkomen met "python". |
Karakterklassen
Sr.nr. | Voorbeeld en beschrijving |
---|---|
1 | [Pp]ython Overeenkomen met "Python" of "python" |
2 | wrijven[ye] Overeenkomen met "robijn" of "rube" |
3 | [aeiou] Overeenkomen met een kleine klinker |
4 | [0-9] Overeenkomen met elk cijfer; hetzelfde als [0123456789] |
5 | [a-z] Overeenkomen met elke kleine ASCII-letter |
6 | [A-Z] Overeenkomen met een ASCII-letter in hoofdletters |
7 | [a-zA-Z0-9] Overeenkomen met een van de bovenstaande |
8 | [^aeiou] Overeenkomen met iets anders dan een kleine klinker |
9 | [^0-9] Overeenkomen met iets anders dan een cijfer |
Speciale karakterklassen
Sr.nr. | Voorbeeld en beschrijving |
---|---|
1 | . Overeenkomen met elk teken behalve nieuwe regel |
2 | \d Zoek een cijfer:[0-9] |
3 | \D Zoek een niet-cijferig getal:[^0-9] |
4 | \s Overeenkomen met een witruimte-teken:[ \t\r\n\f] |
5 | \S Overeenkomen met niet-witruimte:[^ \t\r\n\f] |
6 | \w Overeenkomen met een enkel woordteken:[A-Za-z0-9_] |
7 | \W Overeenkomen met een niet-woordteken:[^A-Za-z0-9_] |
Herhalingsgevallen
Sr.nr. | Voorbeeld en beschrijving |
---|---|
1 | robijn? Match "rub" of "ruby":de y is optioneel |
2 | robijn* Overeenkomen met "wrijven" plus 0 of meer ys |
3 | robijn+ Overeenkomen met "wrijven" plus 1 of meer ys |
4 | \d{3} Match precies 3 cijfers |
5 | \d{3,} Match 3 of meer cijfers |
6 | \d{3,5} Match 3, 4 of 5 cijfers |
Niet-gretige herhaling
Dit komt overeen met het kleinste aantal herhalingen −
Sr.nr. | Voorbeeld en beschrijving |
---|---|
1 | <.*>
Hebzuchtige herhaling:komt overeen met " |
2 | <.*?>
Nongreedy:komt overeen met " |
Groeperen met haakjes
Sr.nr. | Voorbeeld en beschrijving |
---|---|
1 | \D\d+ Geen groep:+ herhaalt \d |
2 | (\D\d)+ Gegroepeerd:+ herhaalt \D\d paar |
3 | ([Pp]ython(, )?)+ Overeenkomen met "Python", "Python, python, python", enz. |
Terugverwijzingen
Dit komt weer overeen met een eerder gematchte groep −
Sr.nr. | Voorbeeld en beschrijving |
---|---|
1 | ([Pp])ython&\1ails Match python&emmers of Python&pails |
2 | (['"])[^\1]*\1 Enkele of dubbele aanhalingstekens. \1 komt overeen met wat de eerste groep ook heeft gevonden. \2 komt overeen met wat de 2e groep ook heeft gevonden, enz. |
Alternatieven
Sr.nr. | Voorbeeld en beschrijving |
---|---|
1 | python|perl Overeenkomen met "python" of "perl" |
2 | rub(y|le)) Overeenkomen met "robijn" of "roebel" |
3 | Python(!+|\?) "Python" gevolgd door een of meer ! of een ? |
Ankers
Dit moet de wedstrijdpositie specificeren.
Sr.nr. | Voorbeeld en beschrijving |
---|---|
1 | ^Python Match "Python" aan het begin van een string of interne regel |
2 | Python$ Match "Python" aan het einde van een string of regel |
3 | \APython Match "Python" aan het begin van een string |
4 | Python\Z Match "Python" aan het einde van een string |
5 | \bPython\b Zoek "Python" op een woordgrens |
6 | \brub\B \B is niet-woordgrens:match "rub" in "rube" en "ruby", maar niet alleen |
7 | Python(?=!) Zoek naar "Python", indien gevolgd door een uitroepteken. |
8 | Python(?!!) Zoek naar "Python", indien niet gevolgd door een uitroepteken. |
Speciale syntaxis met haakjes
Sr.nr. | Voorbeeld en beschrijving |
---|---|
1 | R(?#comment) Komt overeen met "R". De rest is commentaar |
2 | R(?i)uby Ongevoelig voor hoofdletters bij het matchen van "uby" |
3 | R(?i:uby) Hetzelfde als hierboven |
4 | rub(?:y|le)) Alleen groeperen zonder \1 terugverwijzing . te maken |
Python