Tegngrupper i Pythons regulære udtryk
Der findes specielle kommandoer, der
tillader at vælge hele grupper af
tegn på én gang. Kommandoen \d betyder et ciffer
fra 0 til 9. Kommandoen \w
betyder et ciffer, et latinsk bogstav eller underscore-tegnet.
Kommandoen \s betyder
mellemrum eller et blankt tegn: mellemrum,
linjeskift, tabulator. Det er muligt at invertere
kommandoens betydning ved at skrive et stort bogstav:
for eksempel, hvis \d er et ciffer, så er
\D ikke et ciffer.
Eksempel
Lad os finde alle cifre:
txt = '1 12 123'
res = re.sub('\d', '!', txt)
print(res)
Resultat af kodeudførelse:
'! !! !!!'
Eksempel
Gentagelsesoperatorer betragter kommando-grupper
som en helhed, det vil sige, at grupperingsparenteser
ikke er nødvendige. I det følgende eksempel ser søgemønsteret
sådan ud: ciffer fra 0 til
9 én eller flere gange:
txt = '1 12 123 abc @@@'
res = re.sub('\d+', '!', txt)
print(res)
Resultat af kodeudførelse:
'! ! ! abc @@@'
Eksempel
I det følgende eksempel ser søgemønsteret
sådan ud: hvad som helst én eller flere gange,
men ikke et ciffer fra 0 til 9:
txt = '123abc3@@'
res = re.sub('\D+', '!', txt)
print(res)
Resultat af kodeudførelse:
'123!3!'
Eksempel
I dette eksempel ser søgemønsteret sådan ud: blankt tegn én gang:
txt = '1 12 123 abc @@@'
res = re.sub('\s', '!', txt)
print(res)
Resultat af kodeudførelse:
'1!12!123!abc!@@@'
Eksempel
I dette eksempel ser søgemønsteret
sådan ud: IKKE blankt tegn én eller flere
gange. Alle understrenge, adskilt af
mellemrum, vil blive erstattet med '!':
txt = '1 12 123 abc @@@'
res = re.sub('\S+', '!', txt)
print(res)
Resultat af kodeudførelse:
'! ! ! ! !'
Eksempel
I dette eksempel ser søgemønsteret
sådan ud: ciffer eller bogstav én eller flere
gange. Alle understrenge, der består af cifre
og bogstaver, vil blive erstattet med '!':
txt = '1 12 123a Abc @@@'
res = re.sub('\w+', '!', txt)
print(res)
Resultat af kodeudførelse:
'! ! ! ! @@@'
Eksempel
I dette eksempel ser søgemønsteret
sådan ud: IKKE ciffer og IKKE bogstav én eller flere
gange. I vores tilfælde opfylder
'@@@' og alle mellemrum
(de er jo heller ikke cifre eller bogstaver) denne definition.
Læg mærke til, at der i slutningen er én
'!' - den blev til fra strengen
' @@@' - med et mellemrum foran:
txt = '1 12 123 Abc @@@'
res = re.sub('\W+', '!', txt)
print(res)
Resultat af kodeudførelse:
'1!12!123!Abc!'
Praktiske opgaver
Givet en streng:
txt = 'a1a a2a a3a a4a a5a aba aca'
Skriv et regulært udtryk, der finder strenge,
hvor der står bogstaver 'a' i kanterne,
og imellem dem er der ét ciffer.
Givet en streng:
txt = 'a1a a22a a333a a4444a a55555a aba aca'
Skriv et regulært udtryk, der finder strenge,
hvor der står bogstaver 'a' i kanterne,
og imellem dem er der et hvilket som helst antal cifre.
Givet en streng:
txt = 'aa a1a a22a a333a a4444a a55555a aba aca'
Skriv et regulært udtryk, der finder strenge,
hvor der står bogstaver 'a' i kanterne,
og imellem dem er der et hvilket som helst antal cifre (herunder
også nul cifre, det vil sige strengen
'aa').
Givet en streng:
txt = 'avb a1b a2b a3b a4b a5b abb acb'
Skriv et regulært udtryk, der finder strenge
af følgende type: der står bogstaver
'a' og 'b' i kanterne,
og imellem dem -
ikke et tal og ikke et mellemrum.
Givet en streng:
txt = 'ave a#b a2b a$b a4b a5b a-b acb'
Skriv et regulært udtryk, der finder strenge
af følgende type: der står bogstaver
'a' og 'b' i kanterne,
og imellem dem -
ikke et bogstav, ikke et ciffer og ikke et mellemrum.
Givet en streng:
txt = 'ave a#a a2a a$a a4a a5a a-a aca'
Skriv et regulært udtryk, der erstatter alle
mellemrum med '!'.