Afskerming van spesiale karakters in Python regex
Gestel jy moet maak dat 'n spesiale karakter homself verteenwoordig. Om dit te doen moet dit afgeskerm word met 'n agteroorskuins streep. Kom ons kyk na voorbeelde.
Voorbeeld
In die volgende voorbeeld wou die skrywer van die regex,
dat die soekpatroon so moes lyk: letter
'a', dan plus '+', dan
letter 'x'. Die skrywer van die kode
het egter nie die simbool '+' afgeskerm nie en daarom
lyk die soekpatroon in werklikheid so:
letter 'a' een of meer keer,
dan letter 'x':
txt = 'a+x ax aax aaax'
res = re.sub('a+x', '!', txt)
print(res)
Resultaat van die kode uitvoer:
'a+x ! ! !'
Voorbeeld
En nou het die skrywer die plus met 'n agteroorskuins streep
afgeskerm. Nou lyk die soekpatroon soos dit moet:
letter 'a', dan plus
'+', dan letter 'x':
txt = 'a+x ax aax aaax'
res = re.sub('a\+x', '!', txt)
print(res)
Resultaat van die kode uitvoer:
'! ax aax aaax'
Voorbeeld
In hierdie voorbeeld lyk die patroon so:
letter 'a', dan punt '.',
dan letter 'x':
txt = 'a.x abx azx'
res = re.sub('a\.x', '!', txt)
print(res)
Resultaat van die kode uitvoer:
'! abx azx'
Voorbeeld
In die volgende voorbeeld het die skrywer vergeet om die punt af te skerm en het die regex alle substringe gevang, want 'n onaangeskermde punt verteenwoordig enige karakter:
txt = 'a.x abx azx'
res = re.sub('a.x', '!', txt)
print(res)
Resultaat van die kode uitvoer:
'! ! !'
Opmerking
Let daarop dat as jy die agteroorskuins streep vir die punt vergeet (wanneer dit homself moet verteenwoordig) - kan 'n mens dit dalk selfs nie raaksien nie:
res = re.sub('a.x', '!', 'a.x')
print(res) # gee '!', soos ons wou
Visueel werk dit reg (want die punt
verteenwoordig enige karakter, insluitend 'n
gewone punt '.'). Maar as ons die
teks waar vervangings plaasvind verander - sien
ons ons fout:
res = re.sub('a.x', '!', 'a.x abx azx')
print(res) # gee '! ! !', maar verwag was '! abx azx'
Lys van spesiale karakters en gewone karakters
As jy 'n gewone karakter afskerm - gebeur daar niks ernstigs nie - dit sal nogtans homself verteenwoordig. Uitsondering - syfers, hulle kan nie afgeskerm word nie.
Dikwels ontstaan daar twyfel of 'n gegewe simbool spesiaal is. Sommige kom daartoe dat hulle alle verdagte simbolle opeenvolgend afskerm. Dit is eger slegte praktyk (maak die regex vuil met agteroorskuins strepe).
Is spesiale karakters: $ ^ . * + ? \ / {} [] () |
Is nie spesiale karakters nie: @ : , ' " - _ = < > % # ~ `& !
Praktiese take
Gegewe teks:
txt = 'a.a aba aea'
Skryf 'n regex wat die teks
'a.a' sal vind, sonder om die ander te vang.
Gegewe teks:
txt = '2+3 223 2223'
Skryf 'n regex wat die teks
'2+3' sal vind, sonder om die ander te vang.
Gegewe teks:
txt = '23 2+3 2++3 2+++3 345 567'
Skryf 'n regex wat die tekste
'2+3', '2++3', '2+++3',
sal vind, sonder om die ander te vang
(+ kan enige hoeveelheid wees).
Gegewe teks:
txt = '23 2+3 2++3 2+++3 445 677'
Skryf 'n regex wat die tekste
'23', '2+3', '2++3',
'2+++3' sal vind, sonder om die ander te vang.
Gegewe teks:
txt = '*+ *q+ *qq+ *qqq+ *qqq qqq+'
Skryf 'n regex wat die tekste
'*q+', '*qq+', '*qqq+',
sal vind, sonder om die ander te vang.
Gegewe teks:
txt = '[abc] {abc} abc (abc) [abc]'
Skryf 'n regex wat die tekste
in vierkantige hakies sal vind en hulle vervang met
'!'.