Liniuța în seturile din expresiile regulate Python
Liniuța - este de asemenea un caracter special în interiorul [ ]
(însă în afara - nu). Dacă aveți nevoie de liniuța
ea însăși ca simbol - atunci plasați-o acolo,
unde nu va fi interpretată ca separator
de grup.
De ce este acest lucru important: puteți crea un grup
de caractere, fără să vă dați seama. De exemplu,
așa - '[:-@]' - credeți că selectați
două puncte, liniuță și arond, dar în
realitate rezultă un grup de caractere între
: și @. În acest grup sunt incluse
următoarele caractere: ? < = > :
De unde au apărut? Din tabelul ASCII - două puncte are numărul mai mic decât arond - și rezultă un grup. Adică toate grupurile se formează conform tabelului ASCII (dacă doriți puteți folosi acest lucru).
Cum să procedați: plasați simbolul
liniuței acolo, unde cu siguranță nu va fi perceput
ca simbol de grup, de exemplu, la început sau
la sfârșit (adică după [ sau înainte de
]).
De asemenea, puteți să scăpați liniuța - atunci
ea va reprezenta pe ea însăși indiferent
de poziție. De exemplu, în loc de [:-@]
scrieți [:\-@] - și grupul nu se va mai
forma, ci vor fi trei simboluri - două puncte,
liniuță și arond @.
Exemplu
În următorul exemplu șablonul de căutare este:
cifra 1, apoi litera de la 'a'
la 'z', apoi cifra 2:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a-z]2', '!', txt)
print(res)
Rezultatul executării codului:
'! 1-2 ! !'
Exemplu
Să scăpăm acum liniuța. În
rezultat șablonul de căutare este: cifra
1, apoi litera 'a', sau
liniuță, sau litera 'z', apoi cifra
2:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a\-z]2', '!', txt)
print(res)
Rezultatul executării codului:
'! ! 1c2 !'
Exemplu
Puteți pur și simplu să mutați liniuța, fără a o scăpa:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[az-]2', '!', txt)
print(res)
Rezultatul executării codului:
'! ! 1c2 !'
Exemplu
În următorul exemplu șablonul de căutare este:
primul caracter - sunt litere mici sau
liniuță '-', apoi două litere
'x':
txt = 'axx Axx -xx @xx'
res = re.sub('[a-z-]xx', '!', txt)
print(res)
Rezultatul executării codului:
'! Axx ! @xx'
Exemplu
În următorul exemplu șablonul de căutare este:
primul caracter - sunt litere mici, litere mari
sau liniuță '-', apoi două litere
'x':
txt = 'axx Axx -xx @xx'
res = re.sub('[a-zA-Z-]xx', '!', txt)
print(res)
Rezultatul executării codului:
'! ! ! @xx'
Exemplu
Puteți plasa liniuța între două grupuri - acolo cu siguranță nu va mai crea încă un grup:
txt = 'axx 9xx -xx @xx'
res = re.sub('[a-z-0-9]xx', '!', txt)
print(res)
Rezultatul executării codului:
'! ! ! @xx'
Probleme practice
Este dat șirul:
txt = 'xaz xBz xcz x-z x@z'
Găsiți toate șirurile conform următorului șablon:
litera 'x', literă mare sau mică
sau liniuță, litera 'z'.
Este dat șirul:
txt = 'xaz x$z x-z xcz x+z x%z x*z'
Găsiți toate șirurile conform următorului șablon:
litera 'x', apoi sau dolar, sau
liniuță sau plus, apoi litera 'z'.