Tegnsett i regulære uttrykk i Python
Tegngruppene \d og \w er ikke
veldig fleksible. Selv en så enkel oppgave
som å finne alle bokstaver, men ikke tall -
kan ikke løses av dem. For slike oppgaver
bor man bruke hakeparenteser,
som representerer en 'eller'-operasjon.
Hakeparenteser erstatter ett
tegn, hvilket som helst av de som er opplistet inni. For
eksempel, slik: x[abc]x -
sier vi at det skal stå bokstaver
x på kantene, og inni - ett tegn: enten 'a',
eller 'b', eller 'c'.
Etter hakeparenteser kan man skrive
gjentakelsesoperatorer. For eksempel, slik:
x[abc]+x - sier vi at inni
x-ene kan være et hvilket som helst antall tegn
'a', 'b' og 'c' - i
hvilke som helst kombinasjoner.
Man kan ikke bare liste opp tegn, men
også opprette tegn-grupper ved å skrive bindestrek
mellom to tegn. For eksempel, slik:
[a-d] - får vi alle tegn fra
'a' til 'd'.
La oss se på eksempler.
Eksempel
I dette eksemplet ser søkemønsteret
slik ut: mellom x-ene hvilken som helst bokstav fra
'a' til 'z':
Resultat av kjøring av koden:
'! ! ! x@x'
Eksempel
I dette eksemplet ser søkemønsteret
slik ut: mellom x-ene hvilken som helst bokstav fra
'a' til 'k':
txt = 'xax xbx xmx x@x'
res = re.sub('x[a-k]x', '!', txt)
print(res)
Resultat av kjøring av koden:
'! ! xmx x@x'
Eksempel
I dette eksemplet ser søkemønsteret
slik ut: mellom x-ene hvilken som helst bokstav fra
'A' til 'Z':
txt = 'xax xBx xcx x@x'
res = re.sub('x[A-Z]x', '!', txt)
print(res)
Resultat av kjøring av koden:
'xax ! xcx x@x'
Eksempel
I dette eksemplet ser søkemønsteret
slik ut: mellom x-ene hvilket som helst tall fra 0
til 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[0-9]x', '!', txt)
print(res)
Resultat av kjøring av koden:
'xax ! ! ! x@x'
Eksempel
I dette eksemplet ser søkemønsteret
slik ut: mellom x-ene hvilket som helst tall fra 3
til 7:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[3-7]x', '!', txt)
print(res)
Resultat av kjøring av koden:
'xax x1x ! ! x@x'
Eksempel
I dette eksemplet ser søkemønsteret
slik ut: mellom x-ene hvilken som helst bokstav fra
'a' til 'z' eller tall fra
1 til 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[a-z1-9]x', '!', txt)
print(res)
Resultat av kjøring av koden:
'! ! ! ! x@x'
Eksempel
I dette eksemplet ser søkemønsteret
slik ut: mellom x-ene hvilken som helst bokstav fra
'a' til 'z' eller bokstav fra
'A' til 'Z':
txt = 'xax xBx xcx x5x x@x'
res = re.sub('x[a-zA-Z]x', '!', txt)
print(res)
Resultat av kjøring av koden:
'! ! ! x5x x@x'
Eksempel
I dette eksemplet ser søkemønsteret
slik ut: mellom x-ene hvilken som helst bokstav fra
'a' til 'z' eller tallene 1,
2:
txt = 'xax xbx x1x x2x x3x'
res = re.sub('x[a-z12]x', '!', txt)
print(res)
Resultat av kjøring av koden:
'! ! ! ! x3x'
Eksempel
I dette eksemplet ser søkemønsteret
slik ut: mellom x-ene bokstaver fra 'a'
til 'z' i antall fra 1 og
mer:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]+x', '!', txt)
print(res)
Resultat av kjøring av koden:
'xx ! ! ! x123x xa3x'
Eksempel
La oss gjøre slik at antall bokstaver kan være null også:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]*x', '!', txt)
print(res)
Som et resultat vil vi få:
'! ! ! ! x123x xa3x'
Eksempel
Inni hakeparenteser kan man også spesifisere escapede tegn. La oss finne en sekvens av bokstaver og tall, som gjentas null eller flere ganger:
txt = 'xx x@x xadx xas12x xa3x'
res = re.sub('x[a-z\d]*x', '!', txt)
print(res)
Resultat av kjøring av koden:
'! x@x ! ! !'
Eksempel
Hvis vi trenger å spesifisere enda en hakeparentes, må vi også escape den:
txt = 'xx xrx xas[]x x3x'
res = re.sub('x[a-z\[\]]*x', '!', txt)
print(res)
Resultat av kjøring av koden:
'! ! ! x3x'
Praktiske oppgaver
Gitt en streng:
txt = 'aba aea aca aza axa'
Skriv et regulært uttrykk som finner etter
følgende mønster: på kantene står bokstaver
'a', og mellom dem - bokstaven 'b',
'e' eller 'x'.
Gitt en streng:
txt = 'a1a a3a a7a a9a aba'
Skriv et regulært uttrykk som finner etter
følgende mønster: på kantene står bokstaver
'a', og mellom dem - et tall fra
3 til 6.
Gitt en streng:
txt = 'aba aea afa aha aga'
Skriv et regulært uttrykk som finner etter
følgende mønster: på kantene står bokstaver
'a', og mellom dem - en bokstav fra
'a' til 'g'.
Gitt en streng:
txt = 'aba aea afa aha aga'
Skriv et regulært uttrykk som finner etter
følgende mønster: på kantene står bokstaver
'a', og mellom dem - en bokstav fra
'a' til 'f' og fra 'j'
til 'z'.
Gitt en streng:
txt = 'aAa aea aEa aJa a3a'
Skriv et regulært uttrykk som finner etter
følgende mønster: på kantene står bokstaver
'a', og mellom dem - en bokstav fra
'a' til 'f' og fra 'A'
til 'D'.
Gitt en streng:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Skriv et regulært uttrykk som finner etter
følgende mønster: på kantene står bokstaver
'a', og mellom dem - små
latinske bokstaver, uten å berøre de andre.
Gitt en streng:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Skriv et regulært uttrykk som finner etter
følgende mønster: på kantene står bokstaver
'a', og mellom dem - små og
store latinske bokstaver, uten å berøre
de andre.
Gitt en streng:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Skriv et regulært uttrykk som finner etter
følgende mønster: på kantene står bokstaver
'a', og mellom dem - små
latinske bokstaver og tall, uten å berøre
de andre.