Speciālo rakstzīmju ešķēšana Python regulārajās izteiksmēs
Pieņemsim, ka ir nepieciešams panākt, lai speciālā rakstzīme apzīmētu pati sevi. Lai to izdarītu, tā jāešķē ar apgriezto slīpsvītru. Apskatīsim to ar piemēriem.
Piemērs
Šajā piemērā regulārās izteiksmes autors vēlējās,
lai meklēšanas šablons izskatītos šādi: burts
'a', tad plus zīme '+', tad
burts 'x'. Tomēr, koda autors
neiešķēra simbolu '+', un tāpēc
meklēšanas šablons patiesībā izskatās šādi:
burts 'a' viens vai vairāk reižu,
tad burts 'x':
txt = 'a+x ax aax aaax'
res = re.sub('a+x', '!', txt)
print(res)
Koda izpildes rezultāts:
'a+x ! ! !'
Piemērs
Šoreiz autors ir iešķējis plus zīmi ar apgriezto
slīpsvītru. Tagad meklēšanas šablons izskatās
tā, kā vajadzētu: burts 'a', tad plus zīme
'+', tad burts 'x':
txt = 'a+x ax aax aaax'
res = re.sub('a\+x', '!', txt)
print(res)
Koda izpildes rezultāts:
'! ax aax aaax'
Piemērs
Šajā piemērā šablons izskatās šādi:
burts 'a', tad punkts '.',
tad burts 'x':
txt = 'a.x abx azx'
res = re.sub('a\.x', '!', txt)
print(res)
Koda izpildes rezultāts:
'! abx azx'
Piemērs
Nākamajā piemērā autors aizmirsa iešķēt slīpsvītru un ar regulāro izteiksmi tika iekļautas visas apakšvirknes, jo neiešķērtais punkts apzīmē jebkuru simbolu:
txt = 'a.x abx azx'
res = re.sub('a.x', '!', txt)
print(res)
Koda izpildes rezultāts:
'! ! !'
Piezīme
Ievērojiet, ka, ja jūs aizmirsīsiet apgriezto slīpsvītru punktam (kad tam vajadzētu apzīmēt pats sevi) - to varētu pat nepamanīt:
res = re.sub('a.x', '!', 'a.x')
print(res) # atgriezīs '!', kā mēs gribējām
Vizuāli darbojas pareizi (tā kā punkts
apzīmē jebkuru simbolu, tostarp arī
parastu punktu '.'). Bet, ja mainīsiet
virkni, kurā notiek aizvietošana - mēs
ieraudzīsim savu kļūdu:
res = re.sub('a.x', '!', 'a.x abx azx')
print(res) # atgriezīs '! ! !', bet gaidījās '! abx azx'
Speciālo un parasto simbolu saraksts
Ja ešķē parasto simbolu - nekas briesmīgs nenotiks - tas tik un tā būs apzīmējis pats sevi. Izņēmums - cipari, tos nevar ešķēt.
Bieži rodas šaubas, vai šis simbols ir speciāls. Daži nonāk līdz tam, ka ešķē visus aizdomīgos simbolus pēc kārtas. Tomēr, tā ir slikta prakse (aizsērē regulāro izteiksmi ar apgrieztajiem slīpsvītram).
Ir speciālie simboli: $ ^ . * + ? \ / {} [] () |
Nav speciālie simboli: @ : , ' " - _ = < > % # ~ `& !
Praktiskie uzdevumi
Dota virkne:
txt = 'a.a aba aea'
Uzrakstiet regulāro izteiksmi, kas atradīs virkni
'a.a', neiekļaujot pārējās.
Dota virkne:
txt = '2+3 223 2223'
Uzrakstiet regulāro izteiksmi, kas atradīs virkni
'2+3', neiekļaujot pārējās.
Dota virkne:
txt = '23 2+3 2++3 2+++3 345 567'
Uzrakstiet regulāro izteiksmi, kas atradīs virknes
'2+3', '2++3', '2+++3',
neiekļaujot pārējās (+ var būt jebkurš
daudzums).
Dota virkne:
txt = '23 2+3 2++3 2+++3 445 677'
Uzrakstiet regulāro izteiksmi, kas atradīs virknes
'23', '2+3', '2++3',
'2+++3', neiekļaujot pārējās.
Dota virkne:
txt = '*+ *q+ *qq+ *qqq+ *qqq qqq+'
Uzrakstiet regulāro izteiksmi, kas atradīs virknes
'*q+', '*qq+', '*qqq+',
neiekļaujot pārējās.
Dota virkne:
txt = '[abc] {abc} abc (abc) [abc]'
Uzrakstiet regulāro izteiksmi, kas atradīs virknes
kvadrātiekavās un aizvietos tās ar
'!'.