⊗pyPmREESCh 36 of 129 menu

Specialiųjų simbolių ekranavimas Python reguliariosiose išraiškose

Tarkime, kad reikia pasidaryti taip, kad specialusis simbolis reikštų pats save. Tam jis turi būti ekranuotas naudojant atgalinį brūkšnį. Pažiūrėkime pavyzdžiais.

Pavyzdys

Šiame pavyzdyje reguliariosios išraiškos autorius norėjo, kad paieškos šablonas atrodytų taip: raidė 'a', tada pliusas '+', tada raidė 'x'. Tačiau, kodo autorius neekranavo simbolio '+' ir todėl paieškos šablonas iš tikrųjų atrodo taip: raidė 'a' vieną ar daugiau kartų, paskui raidė 'x':

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

Kodo vykdymo rezultatas:

'a+x ! ! !'

Pavyzdys

Dabar autorius ekranavo pliusą atgaliniu brūkšniu. Dabar paieškos šablonas atrodo taip, kaip reikia: raidė 'a', tada pliusas '+', tada raidė 'x':

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

Kodo vykdymo rezultatas:

'! ax aax aaax'

Pavyzdys

Šiame pavyzdyje šablonas atrodo taip: raidė 'a', tada taškas '.', tada raidė 'x':

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

Kodo vykdymo rezultatas:

'! abx azx'

Pavyzdys

Šiame pavyzdyje autorius pamiršo ekranuoti brūkšnį ir pagal reguliariąją išraišką pateko visos eilutės, nes neekranuotas taškas reiškia bet kurį simbolį:

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

Kodo vykdymo rezultatas:

'! ! !'

Pastaba

Atkreipkite dėmesį į tai, kad jei jūs pamiršite atgalinį brūkšnį taškui (kai jis turėtų reikšti pats save) - to galbūt net nepastebėsite:

res = re.sub('a.x', '!', 'a.x') print(res) # grąžins '!', kaip ir norėjome

Vizualiai veikia teisingai (kadangi taškas reiškia bet kurį simbolį, taip pat ir įprastą tašką '.'). Bet jei pakeisime eilutę, kurioje vyksta pakeitimai - mes pamatysime savo klaidą:

res = re.sub('a.x', '!', 'a.x abx azx') print(res) # grąžins '! ! !', o tikėtasi '! abx azx'

Specialiųjų ir įprastų simbolių sąrašas

Jei ekranuosite įprastą simbolį - nieko baisaus neatsitiks - jis vis tiek reikš pats save. Išimtis - skaičiai, jų negalima ekranuoti.

Dažnai kyla abejonių, ar tam tikras simbolis yra specialusis. Kai kurie pradeda ekranuoti visus įtartinus simbolius iš eilės. Tačiau, tai yra bloga praktika (teršia reguliariąsias išraiškas atgaliniais brūkšniais).

Yra specialieji simboliai: $ ^ . * + ? \ / {} [] () |

Nėra specialieji simboliai: @ : , ' " - _ = < > % # ~ `& !

Praktinės užduotys

Duota eilutė:

txt = 'a.a aba aea'

Parašykite reguliariąją išraišką, kuri ras eilutę 'a.a', neperimdama kitų.

Duota eilutė:

txt = '2+3 223 2223'

Parašykite reguliariąją išraišką, kuri ras eilutę '2+3', neperimdama kitų.

Duota eilutė:

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

Parašykite reguliariąją išraišką, kuri ras eilutes '2+3', '2++3', '2+++3', neperimdama kitų (+ gali būti bet koks kiekis).

Duota eilutė:

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

Parašykite reguliariąją išraišką, kuri ras eilutes '23', '2+3', '2++3', '2+++3', neperimdama kitų.

Duota eilutė:

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

Parašykite reguliariąją išraišką, kuri ras eilutes '*q+', '*qq+', '*qqq+', neperimdama kitų.

Duota eilutė:

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

Parašykite reguliariąją išraišką, kuri ras eilutes kvadratiniuose skliaustuose ir pakeis jas '!'.

Lietuvių
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mes naudojame slapukus svetainės veikimui, analizei ir personalizavimui. Duomenų apdorojimas vyksta pagal Privatumo politiką.
priimti visus nustatyti atšaukti