Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Python

Python - Reguliere expressies

Vorige paginaVolgende pagina

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 "perl>"

2

<.*?>

Nongreedy:komt overeen met "" in "perl>"

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

  1. Python-gegevenstypen
  2. Python-operators
  3. Python pass-instructie
  4. Python-functieargumenten
  5. Python-woordenboek
  6. Python-iterators
  7. Python-sluitingen
  8. Python RegEx
  9. Python datetime
  10. Java - Reguliere expressies
  11. C# - Reguliere expressies