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 Regular Expressions (re-module) – een praktische gids

Python Regular Expressions (re-module) – een praktische gids

Ontdek hoe je de kracht van regular expressions in Python kunt benutten met de re-module. Stap-voor-stap voorbeelden illustreren veelvoorkomende patronen, matching-technieken en geavanceerde functies.

Wat is een Regular Expression?

Een regular expression (RegEx) is een reeks karakters die een zoekpatroon definieert. Bijvoorbeeld, het patroon ^a...s$ matched elke vijf-letter string die begint met a en eindigt met s.

^a...s$

Patronen kunnen gebruikt worden om te matchen tegen strings. De volgende tabel demonstreert hoe het patroon zich gedraagt met verschillende inputs:

ExpressieStringGematched?
^a...s$absGeen match
aliasMatch
abyssMatch
AliasGeen match
Een abacusGeen match

Python's re-module biedt de tools die je nodig hebt om met RegEx te werken. Hier is een snel voorbeeld dat re.match() gebruikt om een patroon te checken tegen een string:

import re
patroon = '^a...s$'
test_string = 'abyss'
resultaat = re.match(patroon, test_string)
if resultaat:
    print("Zoeken succesvol.")
else:
    print("Zoeken onsuccesvol.")

Wanneer het patroon gevonden wordt, retourneert re.match() een match-object; anders None.


Patronen specificeren met metakarakters

Metakarakters zijn speciale symbolen die de regex-engine op een unieke manier interpreteert. Hieronder een snel overzicht van de meest voorkomende metakarakters:

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


Vierkante haken: []

Vierkante haken definiëren een set karakters om te matchen. Bijvoorbeeld, [abc] matched elke enkele voorkomens van a, b of c.

ExpressieStringGematched?
[abc]a1 match
ac2 matches
Hey JudeGeen match
abc de ca5 matches

Ranges kunnen uitgedrukt worden met een bindstreep, bijv. [a-e] gelijk aan [abcde]. Om een set te inverteren, plaats een caret ^ na de openende haak, bijv. [^abc] matched elk karakter behalve a, b of c.


Punt: .

De punt matched elk enkel karakter behalve een newline.

ExpressieStringGematched?
..aGeen match
ac1 match
acd1 match
acde2 matches (bevat 4 karakters)

Caret: ^ en Dollar: $

De caret bewerkt het begin van een string; het dollarteken bewerkt het einde. Bijvoorbeeld, ^a matched elke string beginnend met a, terwijl a$ elke string matched die eindigt met a.

ExpressieStringGematched?
^aa1 match
abc1 match
bacGeen match
^ababc1 match
acbGeen match (start met a maar niet gevolgd door b)
ExpressieStringGematched?
a$a1 match
formule1 match
cabGeen match

Quantifiers: *, +, ?, {n,m}

Deze symbolen controleren hoe vaak het voorgaande element moet voorkomen.

  • * – nul of meer keer.
  • + – één of meer keer.
  • ? – nul of één keer.
  • {n,m} – minstens n en maximaal m keer.

Voorbeelden:

ExpressieStringGematched?
ma*nmn1 match
man1 match
maaan1 match
mainGeen match (a niet gevolgd door n)
vrouw1 match
ExpressieStringGematched?
ma+nmnGeen match (geen a)
man1 match
maaan1 match
mainGeen match (a niet gevolgd door n)
vrouw1 match
ExpressieStringGematched?
ma?nmn1 match
man1 match
maaanGeen match (meer dan één a)
mainGeen match (a niet gevolgd door n)
vrouw1 match
ExpressieStringGematched?
a{2,3}abc datGeen match
abc daat1 match (bij daat)
aabc daaat2 matches (bij aabc en daaat)
aabc daaaat2 matches (bij aabc en daaaat)

Algemeen gebruikt patroon: [0-9]{2,4} matched twee tot vier opeenvolgende cijfers.

ExpressieStringGematched?
[0-9]{2,4}ab123csde1 match (bij ab123csde)
12 en 3456733 matches (12, 3456, 73)
1 en 2Geen match

Alternatie: |

De verticale balk implementeert logische OR. Bijvoorbeeld, a|b matched elke string die a of b bevat.

ExpressieStringGematched?
a|bcdeGeen match
ade1 match (bij ade)
acdbea3 matches (bij acdbea)

Groeperen: ()

Haakjes groeperen sub-patronen en vangen gematchte substrings. Voorbeeld: (a|b|c)xz matched elke string die a, b of c bevat gevolgd door xz.

ExpressieStringGematched?
(a|b|c)xzab xzGeen match
abxz1 match (bij abxz)
axz cabxz2 matches (bij axzbc cabxz)

Escapen: \

Gebruik een backslash om een metakarakter als literaal te behandelen. Bijvoorbeeld, \$a matched de letterlijke reeks $a in plaats van $ te interpreteren als end-of-string anker.


Speciale Sequences

Speciale sequences vereenvoudigen veelvoorkomende patronen. Hieronder een referentielijst met illustrerende voorbeelden.

Begin van string: \A

ExpressieStringGematched?
\Athede zonMatch
In de zonGeen match

Woordgrens: \b

ExpressieStringGematched?
\bfoovoetbalMatch
een voetbalMatch
avoetbalGeen match
foo\bde fooMatch
de afoo testMatch
de avoetestGeen match

Niet-woordgrens: \B

ExpressieStringGematched?
\BfoovoetbalGeen match
een voetbalGeen match
avoetbalMatch
foo\Bde fooGeen match
de afoo testGeen match
de avoetestMatch

Cijfer: \d / Niet-cijfer: \D

ExpressieStringGematched?
\d12abc33 matches (bij 12abc3)
PythonGeen match
\D1ab34"503 matches (bij 1ab34"50)
1345Geen match

Whitespace: \s / Niet-whitespace: \S

ExpressieStringGematched?
\sPython RegEx1 match
PythonRegExGeen match
\Sa b2 matches (bij a b)
Geen match

Woordkarakter: \w / Niet-woord: \W

ExpressieStringGematched?
\w12&": ;c 3 matches (bij 12": ;c)
"%> !Geen match
\W1a2%c1 match (bij 1a2%c)
PythonGeen match

Einde van string: \Z

ExpressieStringGematched?
Python\ZIk hou van Python1 match
Ik hou van Python ProgrammerenGeen match
Python is leuk.Geen match

Tip: Gebruik een online regex-tester zoals regex101 om patronen snel te maken en debuggen.


RegEx in Python gebruiken

Python's re-module biedt een rijke set functies en constanten voor regex-operaties. Importeer het met:

import re

Hieronder de meest voorkomende utilities en hoe je ze gebruikt.


re.findall()

Retourneert een lijst van alle non-overlapping matches in een string.

# Alle getallen uit een string halen
import re
string = 'hallo 12 hi 89. Hoe gaat het 34'
patroon = '\d+'
resultaat = re.findall(patroon, string)
print(resultaat)  # Uitvoer: ['12', '89', '34']

Bij geen match wordt een lege lijst geretourneerd.


re.split()

Splitst een string op elk punt waar het patroon matched, retourneert een lijst van substrings.

import re
string = 'Twaalf:12 Negenentachtig:89.'
patroon = '\d+'
resultaat = re.split(patroon, string)
print(resultaat)  # Uitvoer: ['Twaalf:', ' Negenentachtig:', '.']

Gebruik de optionele maxsplit-argument om het aantal splitsingen te beperken. Waarde 0 (standaard) splitst bij elke match.

import re
string = 'Twaalf:12 Negenentachtig:89 Negen:9.'
patroon = '\d+'
# Split alleen bij eerste voorkomen
resultaat = re.split(patroon, string, 1)
print(resultaat)  # Uitvoer: ['Twaalf:', ' Negenentachtig:89 Negen:9.']

re.sub()

Vervangt alle voorkomens van een patroon met een vervangingsstring.

# Alle whitespace-karakters verwijderen
import re
string = 'abc 12\nde 23 \n f45 6'
patroon = '\s+'
vervang = ''
nieuwe_string = re.sub(patroon, vervang, string)
print(nieuwe_string)  # Uitvoer: abc12de23f456

Om vervangingen te beperken, geef een count-argument. Waarde 0 vervangt elke match.

nieuwe_string = re.sub(r'\s+', vervang, string, 1)
print(nieuwe_string)  # Uitvoer: abc12de 23 f45 6

re.subn()

Als re.sub(), maar retourneert een tuple met de nieuwe string en het aantal vervangingen.

nieuwe_string = re.subn(patroon, vervang, string)
print(nieuwe_string)  # Uitvoer: ('abc12de23f456', 4)

re.search()

Vindt de eerste locatie waar het patroon matched.

string = "Python is leuk"
match = re.search('\\APython', string)
if match:
    print("patroon gevonden in de string")
else:
    print("patroon niet gevonden")
# Uitvoer: patroon gevonden in de string

Match-object

Wanneer een match gevonden wordt, retourneert re.search() een Match-object. Veelvoorkomende methoden en attributen:

  • group() – de gematchte substring.
  • start() / end() – indices van de match.
  • span() – een tuple van (start, end).
  • groups() – alle gevangen groepen.
string = '39801 356, 2102 1111'
patroon = '(\\d{3}) (\\d{2})'
match = re.search(patroon, string)
if match:
    print(match.group())
    print(match.group(1))
    print(match.group(2))
    print(match.groups())
    print(match.start(), match.end(), match.span())
else:
    print("patroon niet gevonden")
# Uitvoer:
# 801 35
# 801
# 35
# ('801', '35')
# 2 8 (2, 8)

Raw strings gebruiken (prefix r)

Een string-literal prefixen met r behandelt backslashes als letterlijke karakters, wat per-ongeval escapesequenties voorkomt. Dit is vooral nuttig in regex-patronen.

string = '\n en \r zijn escapesequenties.'
resultaat = re.findall(r'[\n\r]', string)
print(resultaat)  # Uitvoer: ['\n', '\r']

Voor diepere verkenning van de re-module, raadpleeg de officiële Python-documentatie.

Python

  1. Python Keywords en Identifiers: Gereserveerde woorden en naamconventies onder de knie krijgen
  2. Python Datatypes onder de knie krijgen: Een praktische gids
  3. Python Operators onder de knie krijgen: Een uitgebreide gids
  4. Python Pass Statement onder de knie krijgen: Een praktische gids
  5. Python Functie-argumenten onder de knie krijgen: Positionele, Keyword en Default Parameters
  6. Python-dictionaries beheersen: aanmaken, manipuleren en geavanceerde technieken
  7. Python-iterators: hoe ze werken en hoe je je eigen maakt
  8. Python-closures uitgelegd: hoe geneste functies variabelen vangen
  9. Python datetime beheersen: praktische gids voor datums, tijden en tijdzones
  10. Python's time-module beheersen: functies, structs en praktische voorbeelden
  11. Python's time.sleep() onder de knie krijgen: best practices, multithreading en real-world voorbeelden