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 RegEx

Python RegEx

In deze tutorial leer je over reguliere expressies (RegEx) en gebruik je de re-module van Python om met RegEx te werken (met behulp van voorbeelden).

Een Reg ular Ex pression (RegEx) is een reeks tekens die een zoekpatroon definieert. Bijvoorbeeld,

^a...s$

De bovenstaande code definieert een RegEx-patroon. Het patroon is:elke tekenreeks van vijf letters die begint met a en eindigend met s .

Een patroon dat is gedefinieerd met RegEx kan worden gebruikt om te matchen met een tekenreeks.

Expressie String Overeenkomend?
^a...s$ abs Geen overeenkomst
alias Overeenkomst
abyss Overeenkomst
Alias Geen overeenkomst
An abacus Geen overeenkomst

Python heeft een module met de naam re om met RegEx te werken. Hier is een voorbeeld:

import re

pattern = '^a...s$'
test_string = 'abyss'
result = re.match(pattern, test_string)

if result:
  print("Search successful.")
else:
  print("Search unsuccessful.")	

Hier gebruikten we re.match() functie om patroon te zoeken binnen de test_string . De methode retourneert een match-object als de zoekopdracht succesvol is. Zo niet, dan retourneert het None .


Er zijn andere verschillende functies gedefinieerd in de re module om met RegEx te werken. Laten we, voordat we dat onderzoeken, leren over reguliere expressies zelf.

Als je de basis van RegEx al kent, ga dan naar Python RegEx.


Patroon opgeven met RegEx

Om reguliere expressies te specificeren, worden metatekens gebruikt. In het bovenstaande voorbeeld, ^ en $ zijn metatekens.


Metakarakters

Metatekens zijn tekens die op een speciale manier worden geïnterpreteerd door een RegEx-engine. Hier is een lijst met metatekens:

[] . ^ $ * + ? {} () \ |


[] - Vierkante haken

Vierkante haken specificeren een reeks tekens die u wilt matchen.

Expressie String Overeenkomend?
[abc] a 1 overeenkomst
ac 2 overeenkomsten
Hey Jude Geen overeenkomst
abc de ca 5 overeenkomsten

Hier, [abc] komt overeen als de tekenreeks die u probeert te matchen een van de a . bevat , b of c .

U kunt ook een reeks tekens opgeven met - tussen vierkante haken.

  • [a-e] is hetzelfde als [abcde] .
  • [1-4] is hetzelfde als [1234] .
  • [0-39] is hetzelfde als [01239] .

U kunt de tekenset aanvullen (omkeren) met het caret ^ symbool aan het begin van een vierkante haak.

  • [^abc] betekent elk teken behalve a of b of c .
  • [^0-9] betekent elk niet-cijferig teken.

. - Periode

Een punt komt overeen met elk enkel teken (behalve nieuwe regel '\n' ).

Expressie String Overeenkomend?
.. a Geen overeenkomst
ac 1 overeenkomst
acd 1 overeenkomst
acde 2 overeenkomsten (bevat 4 tekens)

^ - Caret

Het dakje ^ wordt gebruikt om te controleren of een tekenreeks begint met een bepaald karakter.

Expressie String Overeenkomend?
^a a 1 overeenkomst
abc 1 overeenkomst
bac Geen overeenkomst
^ab abc 1 overeenkomst
acb Geen overeenkomst (begint met a maar niet gevolgd door b )

$ - Dollar

Het dollarteken $ wordt gebruikt om te controleren of een string eindigt met een bepaald karakter.

Expressie String Overeenkomend?
a$ a 1 overeenkomst
formula 1 overeenkomst
cab Geen overeenkomst

* - Ster

Het stersymbool * komt overeen met nul of meer keren van het patroon dat eraan is overgelaten.

Expressie String Overeenkomend?
ma*n mn 1 overeenkomst
man 1 overeenkomst
maaan 1 overeenkomst
main Geen overeenkomst (a wordt niet gevolgd door n )
woman 1 overeenkomst

+ - Plus

Het plusteken + komt overeen met een of meer exemplaren van het patroon dat eraan is overgelaten.

Expressie String Overeenkomend?
ma+n mn Geen overeenkomst (geen a teken)
man 1 overeenkomst
maaan 1 overeenkomst
main Geen overeenkomst (a wordt niet gevolgd door n)
woman 1 overeenkomst

? - Vraagteken

Het vraagtekensymbool ? komt overeen met nul of één keer van het patroon dat eraan is overgelaten.

Expressie String Overeenkomend?
ma?n mn 1 overeenkomst
man 1 overeenkomst
maaan Geen overeenkomst (meer dan één a teken)
main Geen overeenkomst (a wordt niet gevolgd door n)
woman 1 overeenkomst

{} - Beugel

Beschouw deze code:{n,m} . Dit betekent minimaal n , en maximaal m herhalingen van het patroon dat eraan is overgelaten.

Expressie String Overeenkomend?
a{2,3} abc dat Geen overeenkomst
abc daat 1 overeenkomst (op daat )
aabc daaat 2 overeenkomsten (op aabc en daaat )
aabc daaaat 2 overeenkomsten (op aabc en daaaat )

Laten we nog een voorbeeld proberen. Deze RegEx [0-9]{2, 4} komt overeen met minimaal 2 cijfers maar niet meer dan 4 cijfers

Expressie String Overeenkomend?
[0-9]{2,4} ab123csde 1 overeenkomst (overeenkomst op ab123csde )
12 and 345673 3 overeenkomsten (12 , 3456 , 73 )
1 and 2 Geen overeenkomst

| - Alternatief

Verticale balk | wordt gebruikt voor afwisseling (or operator).

Expressie String Overeenkomend?
a|b cde Geen overeenkomst
ade 1 overeenkomst (overeenkomst op ade )
acdbea 3 overeenkomsten (op acdbea )

Hier, a|b match elke tekenreeks die a . bevat of b


() - Groep

Haakjes () wordt gebruikt om subpatronen te groeperen. Bijvoorbeeld (a|b|c)xz overeenkomen met elke tekenreeks die overeenkomt met a of b of c gevolgd door xz

Expressie String Overeenkomend?
(a|b|c)xz ab xz Geen overeenkomst
abxz 1 overeenkomst (overeenkomst op abxz )
axz cabxz 2 overeenkomsten (op axzbc cabxz )

\ - Backslash

Speling \ wordt gebruikt om te ontsnappen aan verschillende tekens, inclusief alle metatekens. Bijvoorbeeld,

\$a match als een string $ . bevat gevolgd door a . Hier, $ wordt niet op een speciale manier door een RegEx-engine geïnterpreteerd.

Als u niet zeker weet of een teken een speciale betekenis heeft of niet, kunt u \ voor. Dit zorgt ervoor dat het personage niet op een speciale manier wordt behandeld.


Speciale sequenties

Speciale reeksen maken veelgebruikte patronen gemakkelijker om te schrijven. Hier is een lijst met speciale sequenties:

\A - Komt overeen als de opgegeven tekens aan het begin van een tekenreeks staan.

Expressie String Overeenkomend?
\Athe the sun Overeenkomst
In the sun Geen overeenkomst

\b - Komt overeen als de opgegeven tekens aan het begin of het einde van een woord staan.

Expressie String Overeenkomend?
\bfoo football Overeenkomst
a football Overeenkomst
afootball Geen overeenkomst
foo\b the foo Overeenkomst
the afoo test Overeenkomst
the afootest Geen overeenkomst

\B - Tegenover \b . Komt overeen als de opgegeven tekens niet . zijn aan het begin of einde van een woord.

Expressie String Overeenkomend?
\Bfoo football Geen overeenkomst
a football Geen overeenkomst
afootball Overeenkomst
foo\B the foo Geen overeenkomst
the afoo test Geen overeenkomst
the afootest Overeenkomst

\d - Komt overeen met elk decimaal cijfer. Gelijk aan [0-9]

Expressie String Overeenkomend?
\d 12abc3 3 overeenkomsten (op 12abc3 )
Python Geen overeenkomst

\D - Komt overeen met elk niet-decimaal cijfer. Gelijk aan [^0-9]

Expressie String Overeenkomend?
\D 1ab34"50 3 overeenkomsten (op 1ab34"50 )
1345 Geen overeenkomst

\s - Komt overeen met waar een tekenreeks een witruimteteken bevat. Gelijk aan [ \t\n\r\f\v] .

Expressie String Overeenkomend?
\s Python RegEx 1 overeenkomst
PythonRegEx Geen overeenkomst

\S - Komt overeen met waar een tekenreeks een niet-witruimteteken bevat. Gelijk aan [^ \t\n\r\f\v] .

Expressie String Overeenkomend?
\S a b 2 overeenkomsten (op a b )
    Geen overeenkomst

\w - Komt overeen met elk alfanumeriek teken (cijfers en alfabetten). Gelijk aan [a-zA-Z0-9_] . Trouwens, onderstreep _ wordt ook als een alfanumeriek teken beschouwd.

Expressie String Overeenkomend?
\w 12&": ;c 3 overeenkomsten (op 12&": ;c )
%"> ! Geen overeenkomst

\W - Komt overeen met elk niet-alfanumeriek teken. Gelijk aan [^a-zA-Z0-9_]

Expressie String Overeenkomend?
\W 1a2%c 1 wedstrijd (op 1a2%c )
Python Geen overeenkomst

\Z - Komt overeen als de opgegeven tekens aan het einde van een tekenreeks staan.

Expressie String Overeenkomend?
Python\Z I like Python 1 overeenkomst
I like Python Programming Geen overeenkomst
Python is fun. Geen overeenkomst

Tip: Om reguliere expressies te bouwen en te testen, kunt u RegEx-testertools zoals regex101 gebruiken. Deze tool helpt je niet alleen bij het maken van reguliere expressies, maar het helpt je ook om het te leren.

Nu u de basis van RegEx begrijpt, gaan we bespreken hoe u RegEx in uw Python-code kunt gebruiken.


Python RegEx

Python heeft een module met de naam re werken met reguliere expressies. Om het te gebruiken, moeten we de module importeren.

import re

De module definieert verschillende functies en constanten om met RegEx te werken.


re.findall()

De re.findall() methode retourneert een lijst met tekenreeksen die alle overeenkomsten bevat.


Voorbeeld 1:re.findall()


# Program to extract numbers from a string

import re

string = 'hello 12 hi 89. Howdy 34'
pattern = '\d+'

result = re.findall(pattern, string) 
print(result)

# Output: ['12', '89', '34']

Als het patroon niet wordt gevonden, re.findall() geeft een lege lijst terug.


re.split()

De re.split methode splitst de tekenreeks waar er een overeenkomst is en retourneert een lijst met tekenreeksen waar de splitsingen hebben plaatsgevonden.


Voorbeeld 2:re.split()


import re

string = 'Twelve:12 Eighty nine:89.'
pattern = '\d+'

result = re.split(pattern, string) 
print(result)

# Output: ['Twelve:', ' Eighty nine:', '.']

Als het patroon niet wordt gevonden, re.split() geeft een lijst terug die de originele string bevat.


U kunt slagen voor maxsplit argument voor de re.split() methode. Het is het maximale aantal splitsingen dat zal plaatsvinden.


import re

string = 'Twelve:12 Eighty nine:89 Nine:9.'
pattern = '\d+'

# maxsplit = 1
# split only at the first occurrence
result = re.split(pattern, string, 1) 
print(result)

# Output: ['Twelve:', ' Eighty nine:89 Nine:9.']

Trouwens, de standaardwaarde van maxsplit is 0; wat alle mogelijke splitsingen betekent.


re.sub()

De syntaxis van re.sub() is:

re.sub(pattern, replace, string)

De methode retourneert een tekenreeks waarbij overeenkomende exemplaren worden vervangen door de inhoud van replace variabel.


Voorbeeld 3:re.sub()


# Program to remove all whitespaces
import re

# multiline string
string = 'abc 12\
de 23 \n f45 6'

# matches all whitespace characters
pattern = '\s+'

# empty string
replace = ''

new_string = re.sub(pattern, replace, string) 
print(new_string)

# Output: abc12de23f456

Als het patroon niet wordt gevonden, re.sub() geeft de originele string terug.


Je kunt telling doorgeven als vierde parameter voor de re.sub() methode. Indien weggelaten, resulteert dit in 0. Dit vervangt alle instanties.


import re

# multiline string
string = 'abc 12\
de 23 \n f45 6'

# matches all whitespace characters
pattern = '\s+'
replace = ''

new_string = re.sub(r'\s+', replace, string, 1) 
print(new_string)

# Output:
# abc12de 23
# f45 6

re.subn()

De re.subn() lijkt op re.sub() behalve dat het een tuple van 2 items retourneert die de nieuwe string en het aantal gemaakte vervangingen bevatten.


Voorbeeld 4:re.subn()


# Program to remove all whitespaces
import re

# multiline string
string = 'abc 12\
de 23 \n f45 6'

# matches all whitespace characters
pattern = '\s+'

# empty string
replace = ''

new_string = re.subn(pattern, replace, string) 
print(new_string)

# Output: ('abc12de23f456', 4)

re.search()

De re.search() methode heeft twee argumenten:een patroon en een string. De methode zoekt naar de eerste locatie waar het RegEx-patroon een overeenkomst met de tekenreeks produceert.

Als de zoekopdracht succesvol is, re.search() retourneert een match-object; zo niet, dan retourneert het None .

match = re.search(pattern, str)

Voorbeeld 5:re.search()


import re

string = "Python is fun"

# check if 'Python' is at the beginning
match = re.search('\APython', string)

if match:
  print("pattern found inside the string")
else:
  print("pattern not found")  

# Output: pattern found inside the string

Hier, overeenkomst bevat een match-object.


Overeenkomen met object

U kunt methoden en attributen van een match-object verkrijgen met de dir()-functie.

Enkele veelgebruikte methoden en attributen van matchobjecten zijn:


match.group()

De group() methode retourneert het deel van de tekenreeks waar een overeenkomst is.

Voorbeeld 6:Match object


import re

string = '39801 356, 2102 1111'

# Three digit number followed by space followed by two digit number
pattern = '(\d{3}) (\d{2})'

# match variable contains a Match object.
match = re.search(pattern, string) 

if match:
  print(match.group())
else:
  print("pattern not found")

# Output: 801 35

Hier, overeenkomst variabele bevat een match-object.

Ons patroon (\d{3}) (\d{2}) heeft twee subgroepen (\d{3}) en (\d{2}) . U kunt het deel van de tekenreeks van deze subgroepen tussen haakjes krijgen. Dit is hoe:

>>> match.group(1)
'801'

>>> match.group(2)
'35'
>>> match.group(1, 2)
('801', '35')

>>> match.groups()
('801', '35')

match.start(), match.end() en match.span()

De start() functie retourneert de index van het begin van de overeenkomende subtekenreeks. Evenzo, end() geeft de eindindex van de overeenkomende subtekenreeks terug.

>>> match.start()
2
>>> match.end()
8

De span() functie retourneert een tuple die de begin- en eindindex van het overeenkomende deel bevat.

>>> match.span()
(2, 8)

match.re en match.string

De re attribuut van een overeenkomend object retourneert een reguliere expressie-object. Evenzo, string attribuut geeft de doorgegeven string terug.

>>> match.re
re.compile('(\\d{3}) (\\d{2})')

>>> match.string
'39801 356, 2102 1111'

We hebben alle veelgebruikte methoden behandeld die zijn gedefinieerd in de re module. Als je meer wilt weten, bezoek dan Python 3 re module.


Het voorvoegsel r gebruiken vóór RegEx

Wanneer r of R prefix wordt gebruikt voor een reguliere expressie, het betekent onbewerkte tekenreeks. Bijvoorbeeld '\n' is een nieuwe regel terwijl r'\n' betekent twee tekens:een backslash \ gevolgd door n .

Speling \ wordt gebruikt om te ontsnappen aan verschillende tekens, inclusief alle metatekens. Echter, met behulp van r voorvoegsel maakt \ behandelen als een normaal personage.


Voorbeeld 7:Onbewerkte tekenreeks met prefix r


import re

string = '\n and \r are escape sequences.'

result = re.findall(r'[\n\r]', string) 
print(result)

# Output: ['\n', '\r']

Python

  1. Python-sleutelwoorden en -ID's
  2. Python-gegevenstypen
  3. Python-operators
  4. Python pass-instructie
  5. Python-functieargumenten
  6. Python-woordenboek
  7. Python-iterators
  8. Python-sluitingen
  9. Python datetime
  10. Python-tijdmodule
  11. Python-slaap()