Merkkiryhmät Pythonin säännöllisissä lausekkeissa
On olemassa erikoiskomentoja, jotka
mahdollistavat kokoisten merkkiryhmien
valitsemisen kerralla. Komento \d tarkoittaa numeroa
väliltä 0 - 9. Komento \w
merkitsee numeroa, latinalaista kirjainta tai alaviivaa.
Komento \s tarkoittaa
välilyöntiä tai välilyöntimerkkiä: välilyönti,
rivinvaihto, sarkain. Komentoa voi kääntää
päinvastaiseksi kirjoittamalla ison kirjaimen:
esimerkiksi, jos \d on numero, niin
\D on ei-numero.
Esimerkki
Etsitään kaikki numerot:
txt = '1 12 123'
res = re.sub('\d', '!', txt)
print(res)
Koodin suorituksen tulos:
'! !! !!!'
Esimerkki
Toistotoimittajat pitävät komentoryhmiä
yhtenäisenä kokonaisuutena, eli ryhmitteleviä
sulkuja ei tarvita. Seuraavassa esimerkissä hakumalli
näyttää tältä: numero väliltä 0 -
9 yksi tai useampi kerta:
txt = '1 12 123 abc @@@'
res = re.sub('\d+', '!', txt)
print(res)
Koodin suorituksen tulos:
'! ! ! abc @@@'
Esimerkki
Seuraavassa esimerkissä hakumalli näyttää
tältä: mitä tahansa yksi tai useampi kerta,
mutta ei numero väliltä 0 - 9:
txt = '123abc3@@'
res = re.sub('\D+', '!', txt)
print(res)
Koodin suorituksen tulos:
'123!3!'
Esimerkki
Tässä esimerkissä hakumalli näyttää tältä: välilyöntimerkki yhden kerran:
txt = '1 12 123 abc @@@'
res = re.sub('\s', '!', txt)
print(res)
Koodin suorituksen tulos:
'1!12!123!abc!@@@'
Esimerkki
Tässä esimerkissä hakumalli näyttää
tältä: EI välilyöntimerkki yksi tai useampi
kerta. Kaikki välilyönneillä erotetut
merkkijonot korvataan merkillä '!':
txt = '1 12 123 abc @@@'
res = re.sub('\S+', '!', txt)
print(res)
Koodin suorituksen tulos:
'! ! ! ! !'
Esimerkki
Tässä esimerkissä hakumalli näyttää
tältä: numero tai kirjain yksi tai useampi
kerta. Kaikki numeroista ja kirjaimista koostuvat
merkkijonot korvataan merkillä '!':
txt = '1 12 123a Abc @@@'
res = re.sub('\w+', '!', txt)
print(res)
Koodin suorituksen tulos:
'! ! ! ! @@@'
Esimerkki
Tässä esimerkissä hakumalli näyttää
tältä: EI numero eikä kirjain yksi tai useampi
kerta. Tähän määritelmään tapauksessamme
kuuluvat '@@@' ja kaikki välilyönnit
(ne eivät myöskään ole numeroita eivätkä kirjaimia).
Huomaa, että lopussa on yksi
'!' - siihen muuttui merkkijono
' @@@' - jossa on välilyönti edessä:
txt = '1 12 123 Abc @@@'
res = re.sub('\W+', '!', txt)
print(res)
Koodin suorituksen tulos:
'1!12!123!Abc!'
Käytännön tehtävät
Annettu merkkijono:
txt = 'a1a a2a a3a a4a a5a aba aca'
Kirjoita säännöllinen lauseke, joka löytää merkkijonot,
joissa reunoissa on kirjaimet 'a',
ja niiden välissä on yksi numero.
Annettu merkkijono:
txt = 'a1a a22a a333a a4444a a55555a aba aca'
Kirjoita säännöllinen lauseke, joka löytää merkkijonot,
joissa reunoissa on kirjaimet 'a',
ja niiden välissä on mikä tahansa määrä numeroita.
Annettu merkkijono:
txt = 'aa a1a a22a a333a a4444a a55555a aba aca'
Kirjoita säännöllinen lauseke, joka löytää merkkijonot,
joissa reunoissa on kirjaimet 'a',
ja niiden välissä on mikä tahansa määrä numeroita (myös
nolla numeroa, eli merkkijono
'aa').
Annettu merkkijono:
txt = 'avb a1b a2b a3b a4b a5b abb acb'
Kirjoita säännöllinen lauseke, joka löytää merkkijonot
seuraavanlaisia: reunoissa on kirjaimet
'a' ja 'b', ja niiden välissä -
ei numero eikä välilyönti.
Annettu merkkijono:
txt = 'ave a#b a2b a$b a4b a5b a-b acb'
Kirjoita säännöllinen lauseke, joka löytää merkkijonot
seuraavanlaisia: reunoissa on kirjaimet
'a' ja 'b', ja niiden välissä -
ei kirjain, ei numero eikä välilyönti.
Annettu merkkijono:
txt = 'ave a#a a2a a$a a4a a5a a-a aca'
Kirjoita säännöllinen lauseke, joka korvaa kaikki
välilyönnit merkillä '!'.