Teckenuppsättningar i reguljära uttryck i Python
Teckengrupperna \d och \w är inte
särskilt flexibla. Även en så enkel uppgift
som att hitta alla bokstäver, men inte siffror -
kan inte lösas med dem. För sådana uppgifter
bör hakparenteser användas,
som representerar en 'eller'-operation.
Hakparenteser ersätter ett
tecken, vilket som helst av de som anges inuti. Till
exempel, så här: x[abc]x - vi
säger att det vid kanterna ska finnas bokstäverna
x, och inuti - ett tecken: antingen 'a',
eller 'b', eller 'c'.
Efter hakparenteser kan
upprepningsoperatorer skrivas. Till exempel, så här:
x[abc]+x - vi säger att inuti
x kan finnas vilket antal tecken som helst
'a', 'b' och 'c' - i
vilka kombinationer som helst.
Man kan inte bara räkna upp tecken, utan
också skapa teckengrupper genom att skriva ett bindestreck mellan
två tecken. Till exempel, så här:
[a-d] - vi får alla tecken från
'a' till 'd'.
Låt oss titta på exempel.
Exempel
I detta exempel ser sökmönstret ut
så här: mellan x vilken bokstav som helst från
'a' till 'z':
Resultat av kodkörning:
'! ! ! x@x'
Exempel
I detta exempel ser sökmönstret ut
så här: mellan x vilken bokstav som helst från
'a' till 'k':
txt = 'xax xbx xmx x@x'
res = re.sub('x[a-k]x', '!', txt)
print(res)
Resultat av kodkörning:
'! ! xmx x@x'
Exempel
I detta exempel ser sökmönstret ut
så här: mellan x vilken bokstav som helst från
'A' till 'Z':
txt = 'xax xBx xcx x@x'
res = re.sub('x[A-Z]x', '!', txt)
print(res)
Resultat av kodkörning:
'xax ! xcx x@x'
Exempel
I detta exempel ser sökmönstret ut
så här: mellan x vilken siffra som helst från 0
till 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[0-9]x', '!', txt)
print(res)
Resultat av kodkörning:
'xax ! ! ! x@x'
Exempel
I detta exempel ser sökmönstret ut
så här: mellan x vilken siffra som helst från 3
till 7:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[3-7]x', '!', txt)
print(res)
Resultat av kodkörning:
'xax x1x ! ! x@x'
Exempel
I detta exempel ser sökmönstret ut
så här: mellan x vilken bokstav som helst från
'a' till 'z' eller siffra från
1 till 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[a-z1-9]x', '!', txt)
print(res)
Resultat av kodkörning:
'! ! ! ! x@x'
Exempel
I detta exempel ser sökmönstret ut
så här: mellan x vilken bokstav som helst från
'a' till 'z' eller bokstav från
'A' till 'Z':
txt = 'xax xBx xcx x5x x@x'
res = re.sub('x[a-zA-Z]x', '!', txt)
print(res)
Resultat av kodkörning:
'! ! ! x5x x@x'
Exempel
I detta exempel ser sökmönstret ut
så här: mellan x vilken bokstav som helst från
'a' till 'z' eller siffrorna 1,
2:
txt = 'xax xbx x1x x2x x3x'
res = re.sub('x[a-z12]x', '!', txt)
print(res)
Resultat av kodkörning:
'! ! ! ! x3x'
Exempel
I detta exempel ser sökmönstret ut
så här: mellan x bokstäver från 'a'
till 'z' i antal från 1 och
fler:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]+x', '!', txt)
print(res)
Resultat av kodkörning:
'xx ! ! ! x123x xa3x'
Exempel
Låt oss se till att antalet bokstäver också kan vara noll:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]*x', '!', txt)
print(res)
Som ett resultat kommer vi att få:
'! ! ! ! x123x xa3x'
Exempel
Inuti hakparenteser kan man också ange escapeade tecken. Låt oss hitta en sekvens av bokstäver och siffror, som upprepas noll eller fler gånger:
txt = 'xx x@x xadx xas12x xa3x'
res = re.sub('x[a-z\d]*x', '!', txt)
print(res)
Resultat av kodkörning:
'! x@x ! ! !'
Exempel
Om vi också behöver ange ytterligare hakparenteser, måste vi också escapea dem:
txt = 'xx xrx xas[]x x3x'
res = re.sub('x[a-z\[\]]*x', '!', txt)
print(res)
Resultat av kodkörning:
'! ! ! x3x'
Praktiska uppgifter
Given en sträng:
txt = 'aba aea aca aza axa'
Skriv ett reguljärt uttryck som hittar enligt
följande mönster: vid kanterna står bokstäverna
'a', och mellan dem - bokstaven 'b',
'e' eller 'x'.
Given en sträng:
txt = 'a1a a3a a7a a9a aba'
Skriv ett reguljärt uttryck som hittar enligt
följande mönster: vid kanterna står bokstäverna
'a', och mellan dem - en siffra från
3 till 6.
Given en sträng:
txt = 'aba aea afa aha aga'
Skriv ett reguljärt uttryck som hittar enligt
följande mönster: vid kanterna står bokstäverna
'a', och mellan dem - en bokstav från
'a' till 'g'.
Given en sträng:
txt = 'aba aea afa aha aga'
Skriv ett reguljärt uttryck som hittar enligt
följande mönster: vid kanterna står bokstäverna
'a', och mellan dem - en bokstav från
'a' till 'f' och från 'j'
till 'z'.
Given en sträng:
txt = 'aAa aea aEa aJa a3a'
Skriv ett reguljärt uttryck som hittar enligt
följande mönster: vid kanterna står bokstäverna
'a', och mellan dem - en bokstav från
'a' till 'f' och från 'A'
till 'D'.
Given en sträng:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Skriv ett reguljärt uttryck som hittar enligt
följande mönster: vid kanterna står bokstäverna
'a', och mellan dem - små
latinska bokstäver, utan att påverka de andra.
Given en sträng:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Skriv ett reguljärt uttryck som hittar enligt
följande mönster: vid kanterna står bokstäverna
'a', och mellan dem - små och
stora latinska bokstäver, utan att påverka
de andra.
Given en sträng:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Skriv ett reguljärt uttryck som hittar enligt
följande mönster: vid kanterna står bokstäverna
'a', och mellan dem - små
latinska bokstäver och siffror, utan att påverka
de andra.