Teckengrupper i reguljära uttryck i Python
Det finns speciella kommandon som
möjliggör att välja hela grupper av
tecken på en gång. Kommandot \d betyder siffra
från 0 till 9. Kommandot \w
betecknar en siffra, latinsk bokstav eller understreckstecken.
Kommandot \s betecknar
mellanslag eller blanktecken: mellanslag,
radbrytning, tabbsteg. Det går att invertera
kommandots betydelse genom att skriva stor bokstav:
till exempel, om \d är en siffra, så är
\D - inte en siffra.
Exempel
Låt oss hitta alla siffror:
txt = '1 12 123'
res = re.sub('\d', '!', txt)
print(res)
Resultat av kodkörning:
'! !! !!!'
Exempel
Upprepningsoperatorer räknar kommandon-grupper
som en helhet, det vill säga grupperande parenteser
behövs inte. I följande exempel ser sökmönstret
ut så här: siffra från 0 till
9 en eller flera gånger:
txt = '1 12 123 abc @@@'
res = re.sub('\d+', '!', txt)
print(res)
Resultat av kodkörning:
'! ! ! abc @@@'
Exempel
I följande exempel ser sökmönstret ut
så här: vad som helst en eller flera gånger,
men inte siffra från 0 till 9:
txt = '123abc3@@'
res = re.sub('\D+', '!', txt)
print(res)
Resultat av kodkörning:
'123!3!'
Exempel
I detta exempel ser sökmönstret ut så här: blanktecken en gång:
txt = '1 12 123 abc @@@'
res = re.sub('\s', '!', txt)
print(res)
Resultat av kodkörning:
'1!12!123!abc!@@@'
Exempel
I detta exempel ser sökmönstret ut
så här: INTE blanktecken en eller flera
gånger. Alla delsträngar, separerade av
mellanslag, kommer att ersättas med '!':
txt = '1 12 123 abc @@@'
res = re.sub('\S+', '!', txt)
print(res)
Resultat av kodkörning:
'! ! ! ! !'
Exempel
I detta exempel ser sökmönstret ut
så här: siffra eller bokstav en eller flera
gånger. Alla delsträngar som består av siffror
och bokstäver kommer att ersättas med '!':
txt = '1 12 123a Abc @@@'
res = re.sub('\w+', '!', txt)
print(res)
Resultat av kodkörning:
'! ! ! ! @@@'
Exempel
I detta exempel ser sökmönstret ut
så här: INTE siffra och INTE bokstav en eller flera
gånger. I vårt fall matchar
'@@@' och alla mellanslag
(de är ju heller inte siffror eller bokstäver).
Notera att det i slutet finns en
'!' - i den omvandlades strängen
' @@@' - med ett mellanslag framför:
txt = '1 12 123 Abc @@@'
res = re.sub('\W+', '!', txt)
print(res)
Resultat av kodkörning:
'1!12!123!Abc!'
Praktiska uppgifter
Given en sträng:
txt = 'a1a a2a a3a a4a a5a aba aca'
Skriv ett reguljärt uttryck som hittar strängar,
där vid kanterna står bokstäverna 'a',
och mellan dem en siffra.
Given en sträng:
txt = 'a1a a22a a333a a4444a a55555a aba aca'
Skriv ett reguljärt uttryck som hittar strängar,
där vid kanterna står bokstäverna 'a',
och mellan dem valfritt antal siffror.
Given en sträng:
txt = 'aa a1a a22a a333a a4444a a55555a aba aca'
Skriv ett reguljärt uttryck som hittar strängar,
där vid kanterna står bokstäverna 'a',
och mellan dem valfritt antal siffror (inklusive
noll siffror, det vill säga strängen
'aa').
Given en sträng:
txt = 'avb a1b a2b a3b a4b a5b abb acb'
Skriv ett reguljärt uttryck som hittar strängar
av följande typ: vid kanterna står bokstäverna
'a' och 'b', och mellan dem -
inte ett tal och inte ett mellanslag.
Given en sträng:
txt = 'ave a#b a2b a$b a4b a5b a-b acb'
Skriv ett reguljärt uttryck som hittar strängar
av följande typ: vid kanterna står bokstäverna
'a' och 'b', och mellan dem -
inte en bokstav, inte en siffra och inte ett mellanslag.
Given en sträng:
txt = 'ave a#a a2a a$a a4a a5a a-a aca'
Skriv ett reguljärt uttryck som ersätter alla
mellanslag med '!'.