Pomišljaj znotraj nizov v regularnih izrazih Python
Pomišljaj - je tudi poseben znak znotraj [ ]
(zunaj pa - ni). Če potrebujete sam
pomišljaj kot simbol - ga postavite tja,
kjer ne bo razumljen kot ločilo
skupine.
Zakaj je to pomembno: lahko nenamerno ustvarite skupino
simbolov. Na primer,
tako - '[:-@]' - mislite, da
izberete dvopičje, pomišljaj in znak @, a v
resnici dobite skupino simbolov med
: in @. V to skupino spadajo
naslednji simboli: ? < = > :
Od kod so prišli? Iz tabele ASCII - dvopičje ima manjšo številko kot znak @ - in tako nastane skupina. To pomeni, da vse skupine nastanejo glede na tabelo ASCII (po želji lahko to uporabite).
Kako se s tem spopasti: postavite simbol
pomišljaja tja, kjer zagotovo ne bo razumljen
kot simbol skupine, na primer, na začetku ali
na koncu (to je po [ ali pred
]).
Pomišljaj lahko tudi escapirate - potem
bo vedno pomenil sam sebe, ne glede na
položaj. Na primer, namesto [:-@]
napišite [:\-@] - in skupine ne bo
več, temveč bodo trije simboli - dvopičje,
pomišljaj in znak @.
Primer
V naslednjem primeru je vzorec iskanja takšen:
številka 1, nato črka od 'a'
do 'z', nato številka 2:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a-z]2', '!', txt)
print(res)
Rezultat izvajanja kode:
'! 1-2 ! !'
Primer
Zdaj pa escapirajmo pomišljaj. Kot
rezultat je vzorec iskanja takšen: številka
1, nato črka 'a', ali
pomišljaj, ali črka 'z', nato številka
2:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a\-z]2', '!', txt)
print(res)
Rezultat izvajanja kode:
'! ! 1c2 !'
Primer
Pomišljaj lahko preprosto premaknete, ne da bi ga escapirali:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[az-]2', '!', txt)
print(res)
Rezultat izvajanja kode:
'! ! 1c2 !'
Primer
V naslednjem primeru je vzorec iskanja takšen:
prvi simbol - so male črke ali
pomišljaj '-', nato dve črki
'x':
txt = 'axx Axx -xx @xx'
res = re.sub('[a-z-]xx', '!', txt)
print(res)
Rezultat izvajanja kode:
'! Axx ! @xx'
Primer
V naslednjem primeru je vzorec iskanja takšen:
prvi simbol - so male, velike
črke ali pomišljaj '-', nato dve črki
'x':
txt = 'axx Axx -xx @xx'
res = re.sub('[a-zA-Z-]xx', '!', txt)
print(res)
Rezultat izvajanja kode:
'! ! ! @xx'
Primer
Pomišljaj lahko postavite med dve skupini - tam zagotovo ne bo ustvaril nove skupine:
txt = 'axx 9xx -xx @xx'
res = re.sub('[a-z-0-9]xx', '!', txt)
print(res)
Rezultat izvajanja kode:
'! ! ! @xx'
Praktične naloge
Podan niz:
txt = 'xaz xBz xcz x-z x@z'
Poiščite vse nize po naslednjem vzorcu:
črka 'x', velika ali mala
črka ali pomišljaj, črka 'z'.
Podan niz:
txt = 'xaz x$z x-z xcz x+z x%z x*z'
Poiščite vse nize po naslednjem vzorcu:
črka 'x', nato ali dolar, ali
pomišljaj ali plus, nato črka 'z'.