Sidekriips komplektides Pythoni regulaaravaldistes
Sidekriips on samuti spetsiaalsümbol [ ] sees
(aga väljaspool - mitte). Kui vajate sidekriipsu enda kui sümbolit - asetage see kohta,
kus seda ei mõisteta rühmaeraldajana.
Miks see on oluline: võite teha sümbolite rühma
isegi märkamata seda. Näiteks
nii - '[:-@]' - te arvate, et
valite koolonit, sidekriipsu ja @-märgi, kuid
tegelikult saadakse sümbolite rühm vahemikus
: kuni @. Sellesse rühma kuuluvad
järgmised sümbolid: ? < = > :
Kust need said? Tabelist ASCII - koolonil on väiksem number kui @-märgil - ja sellest saabki rühm. See tähendab, et kõik rühmad saadakse ASCII tabeli järgi (soovi korral seda saab kasutada).
Kuidas sellega toime tulla: asetage sidekriipsu sümbol
kohta, kus seda kindlasti ei mõisteta
rühmasümbolina, näiteks alguses või
lõpus (see tähendab pärast [ või enne
]).
Võite ka esitada sidekriipsu (escape) - siis
see tähistab iseennast sõltumata
asukohast. Näiteks [:-@] asemel
kirjutada [:\-@] - ja rühma ei
teki, vaid on kolm sümbolit - koolon,
sidekriips ja @-märk @.
Näide
Järgmises näites on otsimismustriks:
number 1, siis täht vahemikus 'a'
kuni 'z', siis number 2:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a-z]2', '!', txt)
print(res)
Koodi täitmise tulemus:
'! 1-2 ! !'
Näide
Esitame nüüd sidekriipsu. Selle
tulemusena on otsimismustriks: number
1, siis täht 'a', või
sidekriips, või täht 'z', siis number
2:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a\-z]2', '!', txt)
print(res)
Koodi täitmise tulemus:
'! ! 1c2 !'
Näide
Võite lihtsalt sidekriipsu ümber paigutada, ilma seda esitamata (escapimata):
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[az-]2', '!', txt)
print(res)
Koodi täitmise tulemus:
'! ! 1c2 !'
Näide
Järgmises näites on otsimismustriks:
esimene sümbol on väiketähed või
sidekriips '-', siis kaks tähte
'x':
txt = 'axx Axx -xx @xx'
res = re.sub('[a-z-]xx', '!', txt)
print(res)
Koodi täitmise tulemus:
'! Axx ! @xx'
Näide
Järgmises näites on otsimismustriks:
esimene sümbol on väike-, suurtähed
või sidekriips '-', siis kaks tähte
'x':
txt = 'axx Axx -xx @xx'
res = re.sub('[a-zA-Z-]xx', '!', txt)
print(res)
Koodi täitmise tulemus:
'! ! ! @xx'
Näide
Sidekriipsu saab asetada kahe rühma vahele - seal kindlasti ei tee see veel üht rühma:
txt = 'axx 9xx -xx @xx'
res = re.sub('[a-z-0-9]xx', '!', txt)
print(res)
Koodi täitmise tulemus:
'! ! ! @xx'
Praktilised ülesanded
Antud on sõne:
txt = 'xaz xBz xcz x-z x@z'
Leidke kõik sõned järgmise mustri järgi:
täht 'x', suur või väike
täht või sidekriips, täht 'z'.
Antud on sõne:
txt = 'xaz x$z x-z xcz x+z x%z x*z'
Leidke kõik sõned järgmise mustri järgi:
täht 'x', siis kas dollarimärk,
sidekriips või plussmärk, siis täht 'z'.