Tekensets in reguliere expressies van Python
De tekenreeksen \d en \w zijn niet
erg flexibel. Zelfs een eenvoudige taak als
alle letters vinden, maar geen cijfers -
kan niet door hen worden opgelost. Voor dergelijke taken
moet je vierkante haken gebruiken,
die een 'of'-bewerking vertegenwoordigen.
Vierkante haken vervangen één
teken, elk van de binnen genoemde. Bij
voorbeeld, zo: x[abc]x - zeggen we
dat aan de randen de letters
x moeten staan, en daartussen - één teken: ofwel 'a',
ofwel 'b', ofwel 'c'.
Na vierkante haken kunnen
herhalingsoperatoren worden geschreven. Bijvoorbeeld, zo:
x[abc]+x - zeggen we dat tussen
de x'en elk aantal tekens
'a', 'b' en 'c' - in
elke combinatie - mag staan.
Je kunt niet alleen tekens opsommen, maar
ook tekenreeksen maken door een koppelteken
tussen twee tekens te plaatsen. Bijvoorbeeld, zo:
[a-d] - krijgen we alle tekens van
'a' tot 'd'.
Laten we naar voorbeelden kijken.
Voorbeeld
In dit voorbeeld ziet het zoekpatroon er
als volgt uit: tussen de x'en een willekeurige letter van
'a' tot 'z':
Uitvoerresultaat van de code:
'! ! ! x@x'
Voorbeeld
In dit voorbeeld ziet het zoekpatroon er
als volgt uit: tussen de x'en een willekeurige letter van
'a' tot 'k':
txt = 'xax xbx xmx x@x'
res = re.sub('x[a-k]x', '!', txt)
print(res)
Uitvoerresultaat van de code:
'! ! xmx x@x'
Voorbeeld
In dit voorbeeld ziet het zoekpatroon er
als volgt uit: tussen de x'en een willekeurige letter van
'A' tot 'Z':
txt = 'xax xBx xcx x@x'
res = re.sub('x[A-Z]x', '!', txt)
print(res)
Uitvoerresultaat van de code:
'xax ! xcx x@x'
Voorbeeld
In dit voorbeeld ziet het zoekpatroon er
als volgt uit: tussen de x'en een willekeurig cijfer van 0
tot 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[0-9]x', '!', txt)
print(res)
Uitvoerresultaat van de code:
'xax ! ! ! x@x'
Voorbeeld
In dit voorbeeld ziet het zoekpatroon er
als volgt uit: tussen de x'en een willekeurig cijfer van 3
tot 7:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[3-7]x', '!', txt)
print(res)
Uitvoerresultaat van de code:
'xax x1x ! ! x@x'
Voorbeeld
In dit voorbeeld ziet het zoekpatroon er
als volgt uit: tussen de x'en een willekeurige letter van
'a' tot 'z' of een cijfer van
1 tot 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[a-z1-9]x', '!', txt)
print(res)
Uitvoerresultaat van de code:
'! ! ! ! x@x'
Voorbeeld
In dit voorbeeld ziet het zoekpatroon er
als volgt uit: tussen de x'en een willekeurige letter van
'a' tot 'z' of een letter van
'A' tot 'Z':
txt = 'xax xBx xcx x5x x@x'
res = re.sub('x[a-zA-Z]x', '!', txt)
print(res)
Uitvoerresultaat van de code:
'! ! ! x5x x@x'
Voorbeeld
In dit voorbeeld ziet het zoekpatroon er
als volgt uit: tussen de x'en een willekeurige letter van
'a' tot 'z' of de cijfers 1,
2:
txt = 'xax xbx x1x x2x x3x'
res = re.sub('x[a-z12]x', '!', txt)
print(res)
Uitvoerresultaat van de code:
'! ! ! ! x3x'
Voorbeeld
In dit voorbeeld ziet het zoekpatroon er
als volgt uit: tussen de x'en letters van 'a'
tot 'z' in een hoeveelheid van 1 of
meer:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]+x', '!', txt)
print(res)
Uitvoerresultaat van de code:
'xx ! ! ! x123x xa3x'
Voorbeeld
Laten we het zo maken dat het aantal letters ook nul kan zijn:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]*x', '!', txt)
print(res)
Als resultaat krijgen we:
'! ! ! ! x123x xa3x'
Voorbeeld
Binnen vierkante haken kunnen ook geëscape tekens worden opgegeven. Laten we een reeks letters en cijfers vinden, die nul of meer keer wordt herhaald:
txt = 'xx x@x xadx xas12x xa3x'
res = re.sub('x[a-z\d]*x', '!', txt)
print(res)
Uitvoerresultaat van de code:
'! x@x ! ! !'
Voorbeeld
Als we nog een set vierkante haken moeten opgeven, dan moeten we die ook zeker escapen:
txt = 'xx xrx xas[]x x3x'
res = re.sub('x[a-z\[\]]*x', '!', txt)
print(res)
Uitvoerresultaat van de code:
'! ! ! x3x'
Praktische taken
Gegeven een string:
txt = 'aba aea aca aza axa'
Schrijf een reguliere expressie die vindt volgens
het volgende patroon: aan de randen staan de letters
'a', en daartussen - de letter 'b',
'e' of 'x'.
Gegeven een string:
txt = 'a1a a3a a7a a9a aba'
Schrijf een reguliere expressie die vindt volgens
het volgende patroon: aan de randen staan de letters
'a', en daartussen - een cijfer van
3 tot 6.
Gegeven een string:
txt = 'aba aea afa aha aga'
Schrijf een reguliere expressie die vindt volgens
het volgende patroon: aan de randen staan de letters
'a', en daartussen - een letter van
'a' tot 'g'.
Gegeven een string:
txt = 'aba aea afa aha aga'
Schrijf een reguliere expressie die vindt volgens
het volgende patroon: aan de randen staan de letters
'a', en daartussen - een letter van
'a' tot 'f' en van 'j'
tot 'z'.
Gegeven een string:
txt = 'aAa aea aEa aJa a3a'
Schrijf een reguliere expressie die vindt volgens
het volgende patroon: aan de randen staan de letters
'a', en daartussen - een letter van
'a' tot 'f' en van 'A'
tot 'D'.
Gegeven een string:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Schrijf een reguliere expressie die vindt volgens
het volgende patroon: aan de randen staan de letters
'a', en daartussen - kleine
Latijnse letters, zonder de andere aan te tasten.
Gegeven een string:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Schrijf een reguliere expressie die vindt volgens
het volgende patroon: aan de randen staan de letters
'a', en daartussen - kleine en
hoofdletters, zonder de andere aan te tasten.
Gegeven een string:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Schrijf een reguliere expressie die vindt volgens
het volgende patroon: aan de randen staan de letters
'a', en daartussen - kleine
Latijnse letters en cijfers, zonder de andere aan te tasten.