Simbolių grupės Python reguliariosiose išraiškose
Yra specialių komandų, kurios
leidžia iš karto pasirinkti ištisas
simbolių grupes. Komanda \d reiškia skaitmenį
nuo 0 iki 9. Komanda \w
reiškia skaitmenį, lotynišką raidę arba brūkšnį
apačioje. Komanda \s reiškia
tarpą arba tarpinį simbolį: tarpą,
eilutės pabaigą, tabuliaciją. Galima apversti
komandos reikšmę, parašius didžiąją raidę:
pavyzdžiui, jei \d - skaitmuo, tai
\D - ne skaitmuo.
Pavyzdys
Raskime visus skaitmenis:
txt = '1 12 123'
res = re.sub('\d', '!', txt)
print(res)
Kodo vykdymo rezultatas:
'! !! !!!'
Pavyzdys
Kartojimo operatoriai laiko komandas-grupes
vienetu, tai yra, grupuojantys skliaustai
nereikalingi. Šiame pavyzdyje paieškos šablonas
atrodo taip: skaitmuo nuo 0 iki
9 vieną ar daugiau kartų:
txt = '1 12 123 abc @@@'
res = re.sub('\d+', '!', txt)
print(res)
Kodo vykdymo rezultatas:
'! ! ! abc @@@'
Pavyzdys
Šiame pavyzdyje paieškos šablonas atrodo
taip: bet koks vienas ar daugiau kartų,
bet ne skaitmuo nuo 0 iki 9:
txt = '123abc3@@'
res = re.sub('\D+', '!', txt)
print(res)
Kodo vykdymo rezultatas:
'123!3!'
Pavyzdys
Šiame pavyzdyje paieškos šablonas atrodo taip: tarpinis simbolis vieną kartą:
txt = '1 12 123 abc @@@'
res = re.sub('\s', '!', txt)
print(res)
Kodo vykdymo rezultatas:
'1!12!123!abc!@@@'
Pavyzdys
Šiame pavyzdyje paieškos šablonas atrodo
taip: NE tarpinis simbolis vieną ar daugiau
kartų. Visos eilutės, atskirtos
tarpais, bus pakeistos į '!':
txt = '1 12 123 abc @@@'
res = re.sub('\S+', '!', txt)
print(res)
Kodo vykdymo rezultatas:
'! ! ! ! !'
Pavyzdys
Šiame pavyzdyje paieškos šablonas atrodo
taip: skaitmuo ar raidė vieną ar daugiau
kartų. Visos eilutės, susidedančios iš skaitmenų
ir raidžių, bus pakeistos į '!':
txt = '1 12 123a Abc @@@'
res = re.sub('\w+', '!', txt)
print(res)
Kodo vykdymo rezultatas:
'! ! ! ! @@@'
Pavyzdys
Šiame pavyzdyje paieškos šablonas atrodo
taip: NE skaitmuo ir NE raidė vieną ar daugiau
kartų. Pagal šį apibrėžimą mūsų
atveju patenka '@@@' ir visi tarpai
(juk jie taip pat nėra nei skaitmenys, nei raidės).
Atkreipkite dėmesį į tai, kad pabaigoje vienas
'!' - į jį pavirto eilutė
' @@@' - su tarpu priekyje:
txt = '1 12 123 Abc @@@'
res = re.sub('\W+', '!', txt)
print(res)
Kodo vykdymo rezultatas:
'1!12!123!Abc!'
Praktinės užduotys
Duota eilutė:
txt = 'a1a a2a a3a a4a a5a aba aca'
Parašykite reguliariąją išraišką, kuri ras eilutes,
kuriose kraštuose yra raidės 'a',
o tarp jų vienas skaitmuo.
Duota eilutė:
txt = 'a1a a22a a333a a4444a a55555a aba aca'
Parašykite reguliariąją išraišką, kuri ras eilutes,
kuriose kraštuose yra raidės 'a',
o tarp jų bet koks skaitmenų kiekis.
Duota eilutė:
txt = 'aa a1a a22a a333a a4444a a55555a aba aca'
Parašykite reguliariąją išraišką, kuri ras eilutes,
kuriose kraštuose yra raidės 'a',
o tarp jų bet koks skaitmenų kiekis (taip pat
ir nulis skaitmenų, tai yra eilutė
'aa').
Duota eilutė:
txt = 'avb a1b a2b a3b a4b a5b abb acb'
Parašykite reguliariąją išraišką, kuri ras eilutes
šio tipo: kraštuose yra raidės
'a' ir 'b', o tarp jų -
ne skaičius ir ne tarpas.
Duota eilutė:
txt = 'ave a#b a2b a$b a4b a5b a-b acb'
Parašykite reguliariąją išraišką, kuri ras eilutes
šio tipo: kraštuose yra raidės
'a' ir 'b', o tarp jų -
ne raidė, ne skaitmuo ir ne tarpas.
Duota eilutė:
txt = 'ave a#a a2a a$a a4a a5a a-a aca'
Parašykite reguliariąją išraišką, kuri pakeis visus
tarpus į '!'.