Tegngrupper i regulære uttrykk i Python
Det finnes spesielle kommandoer som
tillater deg å velge hele grupper av
tegn på en gang. Kommandoen \d betyr et siffer
fra 0 til 9. Kommandoen \w
betyr et siffer, en latinsk bokstav eller understrekingstegnet.
Kommandoen \s betyr
mellomrom eller et blanktegn: mellomrom,
linjeskift, tabulator. Du kan invertere
betydningen av kommandoen ved å skrive en stor bokstav:
for eksempel, hvis \d er et siffer, så er
\D - ikke et siffer.
Eksempel
La oss finne alle sifre:
txt = '1 12 123'
res = re.sub('\d', '!', txt)
print(res)
Resultatet av kjøring av koden:
'! !! !!!'
Eksempel
Repetisjonsoperatorer betrakter kommando-grupper
som en helhet, det vil si at grupperende parenteser
ikke er nødvendig. I det neste eksemplet ser søkemønsteret
slik ut: siffer fra 0 til
9 en eller flere ganger:
txt = '1 12 123 abc @@@'
res = re.sub('\d+', '!', txt)
print(res)
Resultatet av kjøring av koden:
'! ! ! abc @@@'
Eksempel
I det neste eksemplet ser søkemønsteret
slik ut: hva som helst en eller flere ganger,
men ikke et siffer fra 0 til 9:
txt = '123abc3@@'
res = re.sub('\D+', '!', txt)
print(res)
Resultatet av kjøring av koden:
'123!3!'
Eksempel
I dette eksemplet ser søkemønsteret slik ut: blanktegn en gang:
txt = '1 12 123 abc @@@'
res = re.sub('\s', '!', txt)
print(res)
Resultatet av kjøring av koden:
'1!12!123!abc!@@@'
Eksempel
I dette eksemplet ser søkemønsteret
slik ut: IKKE blanktegn en eller flere
ganger. Alle delstrenger, skilt med
mellomrom, vil bli erstattet med '!':
txt = '1 12 123 abc @@@'
res = re.sub('\S+', '!', txt)
print(res)
Resultatet av kjøring av koden:
'! ! ! ! !'
Eksempel
I dette eksemplet ser søkemønsteret
slik ut: siffer eller bokstav en eller flere
ganger. Alle delstrenger som består av sifre
og bokstaver, vil bli erstattet med '!':
txt = '1 12 123a Abc @@@'
res = re.sub('\w+', '!', txt)
print(res)
Resultatet av kjøring av koden:
'! ! ! ! @@@'
Eksempel
I dette eksemplet ser søkemønsteret
slik ut: IKKE siffer og IKKE bokstav en eller flere
ganger. I vårt tilfelle passer
'@@@' og alle mellomrom
(de er jo verken sifre eller bokstaver)
innenfor denne definisjonen.
Legg merke til at det på slutten er ett
'!' - den ble til fra strengen
' @@@' - med et mellomrom foran:
txt = '1 12 123 Abc @@@'
res = re.sub('\W+', '!', txt)
print(res)
Resultatet av kjøring av koden:
'1!12!123!Abc!'
Praktiske oppgaver
Gitt en streng:
txt = 'a1a a2a a3a a4a a5a aba aca'
Skriv et regulært uttrykk som finner strenger,
hvor det på kantene står bokstaver 'a',
og mellom dem er det ett siffer.
Gitt en streng:
txt = 'a1a a22a a333a a4444a a55555a aba aca'
Skriv et regulært uttrykk som finner strenger,
hvor det på kantene står bokstaver 'a',
og mellom dem er et hvilket som helst antall sifre.
Gitt en streng:
txt = 'aa a1a a22a a333a a4444a a55555a aba aca'
Skriv et regulært uttrykk som finner strenger,
hvor det på kantene står bokstaver 'a',
og mellom dem er et hvilket som helst antall sifre (inkludert
null sifre, det vil si strengen
'aa').
Gitt en streng:
txt = 'avb a1b a2b a3b a4b a5b abb acb'
Skriv et regulært uttrykk som finner strenger
av følgende type: på kantene står bokstaver
'a' og 'b', og mellom dem -
ikke et tall og ikke et mellomrom.
Gitt en streng:
txt = 'ave a#b a2b a$b a4b a5b a-b acb'
Skriv et regulært uttrykk som finner strenger
av følgende type: på kantene står bokstaver
'a' og 'b', og mellom dem -
ikke en bokstav, ikke et siffer og ikke et mellomrom.
Gitt en streng:
txt = 'ave a#a a2a a$a a4a a5a a-a aca'
Skriv et regulært uttrykk som erstatter alle
mellomrom med '!'.