Tekengroepen in reguliere expressies van Python
Er zijn speciale commando's die
het mogelijk maken om direct hele groepen
tekens te selecteren. Het commando \d betekent een cijfer
van 0 tot 9. Het commando \w
duidt een cijfer, een Latijnse letter of het underscore-teken
aan. Het commando \s duidt
een spatie of een witruimte-teken aan: spatie,
regeloverloop, tabulatie. Je kunt de betekenis van het
commando omkeren door een hoofdletter te schrijven:
bijvoorbeeld, als \d - een cijfer is, dan
\D - geen cijfer.
Voorbeeld
Laten we alle cijfers vinden:
txt = '1 12 123'
res = re.sub('\d', '!', txt)
print(res)
Resultaat van de code-uitvoering:
'! !! !!!'
Voorbeeld
Herhalingsoperatoren beschouwen de commando-groepen
als een geheel, dat wil zeggen dat groeperende haakjes
niet nodig zijn. In het volgende voorbeeld ziet het zoekpatroon
er als volgt uit: cijfer van 0 tot
9 een of meer keer:
txt = '1 12 123 abc @@@'
res = re.sub('\d+', '!', txt)
print(res)
Resultaat van de code-uitvoering:
'! ! ! abc @@@'
Voorbeeld
In het volgende voorbeeld ziet het zoekpatroon er
als volgt uit: alles wat dan ook een of meer keer,
maar geen cijfer van 0 tot 9:
txt = '123abc3@@'
res = re.sub('\D+', '!', txt)
print(res)
Resultaat van de code-uitvoering:
'123!3!'
Voorbeeld
In dit voorbeeld ziet het zoekpatroon er als volgt uit: witruimte-teken een keer:
txt = '1 12 123 abc @@@'
res = re.sub('\s', '!', txt)
print(res)
Resultaat van de code-uitvoering:
'1!12!123!abc!@@@'
Voorbeeld
In dit voorbeeld ziet het zoekpatroon er
als volgt uit: GEEN witruimte-teken een of meer
keer. Alle substrings, gescheiden door
spaties, worden vervangen door '!':
txt = '1 12 123 abc @@@'
res = re.sub('\S+', '!', txt)
print(res)
Resultaat van de code-uitvoering:
'! ! ! ! !'
Voorbeeld
In dit voorbeeld ziet het zoekpatroon er
als volgt uit: cijfer of letter een of meer
keer. Alle substrings, bestaande uit cijfers
en letters, worden vervangen door '!':
txt = '1 12 123a Abc @@@'
res = re.sub('\w+', '!', txt)
print(res)
Resultaat van de code-uitvoering:
'! ! ! ! @@@'
Voorbeeld
In dit voorbeeld ziet het zoekpatroon er
als volgt uit: GEEN cijfer en GEEN letter een of meer
keer. Onder deze definitie vallen in ons
geval '@@@' en alle spaties
(zij zijn immers ook geen cijfers en geen letters).
Let op het feit dat er aan het einde één
'!' staat - hierin is de string
' @@@' - met een spatie vooraan - omgezet:
txt = '1 12 123 Abc @@@'
res = re.sub('\W+', '!', txt)
print(res)
Resultaat van de code-uitvoering:
'1!12!123!Abc!'
Praktische taken
Gegeven een string:
txt = 'a1a a2a a3a a4a a5a aba aca'
Schrijf een reguliere expressie die de strings vindt,
waarin aan de randen de letters 'a' staan,
en daartussen één cijfer.
Gegeven een string:
txt = 'a1a a22a a333a a4444a a55555a aba aca'
Schrijf een reguliere expressie die de strings vindt,
waarin aan de randen de letters 'a' staan,
en daartussen een willekeurig aantal cijfers.
Gegeven een string:
txt = 'aa a1a a22a a333a a4444a a55555a aba aca'
Schrijf een reguliere expressie die de strings vindt,
waarin aan de randen de letters 'a' staan,
en daartussen een willekeurig aantal cijfers (inclusief
null cijfers, dat wil zeggen de string
'aa').
Gegeven een string:
txt = 'avb a1b a2b a3b a4b a5b abb acb'
Schrijf een reguliere expressie die de strings vindt
van het volgende type: aan de randen staan de letters
'a' en 'b', en daartussen -
geen getal en geen spatie.
Gegeven een string:
txt = 'ave a#b a2b a$b a4b a5b a-b acb'
Schrijf een reguliere expressie die de strings vindt
van het volgende type: aan de randen staan de letters
'a' en 'b', en daartussen -
geen letter, geen cijfer en geen spatie.
Gegeven een string:
txt = 'ave a#a a2a a$a a4a a5a a-a aca'
Schrijf een reguliere expressie die alle
spaties vervangt door '!'.