⊗pyPmREESCh 36 of 129 menu

Escaparea caracterelor speciale în expresiile regulate Python

Să presupunem că trebuie să facem astfel încât un caracter special să reprezinte el însuși. Pentru aceasta acesta trebuie escapat folosind backslash. Să vedem câteva exemple.

Exemplu

În următorul exemplu, autorul expresiei regulate a vrut ca modelul de căutare să arate astfel: litera 'a', apoi plus '+', apoi litera 'x'. Cu toate acestea, autorul codului nu a escapat simbolul '+' și de aceea modelul de căutare de fapt arată astfel: litera 'a' de una sau mai multe ori, apoi litera 'x':

txt = 'a+x ax aax aaax' res = re.sub('a+x', '!', txt) print(res)

Rezultatul executării codului:

'a+x ! ! !'

Exemplu

Acum autorul a escapat plusul cu backslash. Acum modelul de căutare arată așa cum trebuie: litera 'a', apoi plus '+', apoi litera 'x':

txt = 'a+x ax aax aaax' res = re.sub('a\+x', '!', txt) print(res)

Rezultatul executării codului:

'! ax aax aaax'

Exemplu

În acest exemplu modelul arată astfel: litera 'a', apoi punct '.', apoi litera 'x':

txt = 'a.x abx azx' res = re.sub('a\.x', '!', txt) print(res)

Rezultatul executării codului:

'! abx azx'

Exemplu

În următorul exemplu autorul a uitat să escape slashul și sub expresia regulată au fost capturate toate subșirurile, deoarece punctul neescapat reprezintă orice caracter:

txt = 'a.x abx azx' res = re.sub('a.x', '!', txt) print(res)

Rezultatul executării codului:

'! ! !'

Observație

Atenție la faptul că dacă uitați backslash-ul pentru punct (când acesta ar trebui să reprezinte el însuși) - acest lucru poate să nu fie observat:

res = re.sub('a.x', '!', 'a.x') print(res) # va returna '!', așa cum am vrut

Vizual funcționează corect (deoarece punctul reprezintă orice caracter, inclusiv punctul obișnuit '.'). Dar dacă schimbăm șirul în care se fac înlocuirile - vom vedea greșeala noastră:

res = re.sub('a.x', '!', 'a.x abx azx') print(res) # va returna '! ! !', dar se aștepta '! abx azx'

Lista caracterelor speciale și obișnuite

Dacă escapați un caracter obișnuit - nu se va întâmpla nimic rău - acesta va reprezenta oricum el însuși. Excepție - cifrele, acestea nu pot fi escapare.

Deseori apare îndoiala dacă un anumit simbol este special. Unii ajung să escapeze toate caracterele suspecte la rând. Cu toate acestea, aceasta este o practică proastă (încarcă expresia regulată cu backslash-uri).

Sunt caractere speciale: $ ^ . * + ? \ / {} [] () |

Nu sunt caractere speciale: @ : , ' " - _ = < > % # ~ `& !

Probleme practice

Este dat șirul:

txt = 'a.a aba aea'

Scrieți o expresie regulată care va găsi șirul 'a.a', fără a captura celelalte.

Este dat șirul:

txt = '2+3 223 2223'

Scrieți o expresie regulată care va găsi șirul '2+3', fără a captura celelalte.

Este dat șirul:

txt = '23 2+3 2++3 2+++3 345 567'

Scrieți o expresie regulată care va găsi șirurile '2+3', '2++3', '2+++3', fără a captura celelalte (+ poate fi orice număr).

Este dat șirul:

txt = '23 2+3 2++3 2+++3 445 677'

Scrieți o expresie regulată care va găsi șirurile '23', '2+3', '2++3', '2+++3', fără a captura celelalte.

Este dat șirul:

txt = '*+ *q+ *qq+ *qqq+ *qqq qqq+'

Scrieți o expresie regulată care va găsi șirurile '*q+', '*qq+', '*qqq+', fără a captura celelalte.

Este dat șirul:

txt = '[abc] {abc} abc (abc) [abc]'

Scrieți o expresie regulată care va găsi șirurile în paranteze pătrate și le va înlocui cu '!'.

Română
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Folosim cookie pentru funcționarea site-ului, analiză și personalizare. Prelucrarea datelor are loc în conformitate cu Politica de confidențialitate.
acceptă toate configurează respinge