Ulinzi wa Herufi Maalum katika Usanifu (Regex) wa Python
Tuseme unahitaji kufanya herufi maalum iashirie yenyewe. Ili kufanya hivyo inapaswa kulindwa kwa kutumia mshale wa nyuma. Tuangalie kwa mifano.
Mfano
Katika mfano ufuatao mwandishi wa regex alitaka,
muundo wa utafutaji uonekane kama hivi: herufi
'a', kisha alama ya jumlisha '+', kisha
herufi 'x'. Hata hivyo, mwandishi wa kodi
hakuilinda alama '+' na kwa hivyo
muundo wa utafutaji kweli unaonekana hivi:
herufi 'a' mara moja au zaidi,
kisha herufi 'x':
txt = 'a+x ax aax aaax'
res = re.sub('a+x', '!', txt)
print(res)
Matokeo ya utekelezaji wa kodi:
'a+x ! ! !'
Mfano
Sasa mwandishi ameilinda alama ya jumlisha kwa
mshale wa nyuma. Sasa muundo wa utafutaji unaonekana
kama inavyopaswa: herufi 'a', kisha alama ya jumlisha
'+', kisha herufi 'x':
txt = 'a+x ax aax aaax'
res = re.sub('a\+x', '!', txt)
print(res)
Matokeo ya utekelezaji wa kodi:
'! ax aax aaax'
Mfano
Katika mfano huu muundo unaonekana hivi:
herufi 'a', kisha nukta '.',
kisha herufi 'x':
txt = 'a.x abx azx'
res = re.sub('a\.x', '!', txt)
print(res)
Matokeo ya utekelezaji wa kodi:
'! abx azx'
Mfano
Katika mfano ufuatao mwandishi amesahau kulinda alama ya nukta na kila kipande cha herufi kiliingia chini ya regex, kwa sababu nukta isiyolindwa inaashiria herufi yoyote:
txt = 'a.x abx azx'
res = re.sub('a.x', '!', txt)
print(res)
Matokeo ya utekelezaji wa kodi:
'! ! !'
Uzingatiaji
Zingatia kuwa ikiwa utasahau mshale wa nyuma kwa nukta (wakati inapaswa kuashiria yenyewe) - hii inaweza usiione:
res = re.sub('a.x', '!', 'a.x')
print(res) # atarudisha '!', kama tulivyotaka
Kwa kuonekana inafanya kazi sawa (kwa sababu nukta
inaashiria herufi yoyote, pamoja na
nukta ya kawaida '.'). Lakini ikiwa utabadilisha
mstari ambao unafanywa vibadala - tutaona
makosa yetu:
res = re.sub('a.x', '!', 'a.x abx azx')
print(res) # atarudisha '! ! !', lakini tulitarajia '! abx azx'
Orodha ya alama maalum na za kawaida
Ikiwa utalinda herufi ya kawaida - hakuna jambo baya litakalotokea - bado itaashiria yenyewe. Isipokuwa - nambari, haziwezi kulindwa.
Mara nyingi huwa na mashaka, ikiwa alama fulani ni maalum. Wengine hufika hadi kufika kwenye kuzilinda alama zote zenye mashaka mfululizo. Hata hivyo, hii ni tabia mbaya (ichafue regex kwa mishale ya nyuma).
Ni alama maalum: $ ^ . * + ? \ / {} [] () |
Si alama maalum: @ : , ' " - _ = < > % # ~ `& !
Kazi za Vitendo
Umepewa mstari:
txt = 'a.a aba aea'
Andika regex, ambayo itapata mstari
'a.a', bila kukamata mengine.
Umepewa mstari:
txt = '2+3 223 2223'
Andika regex, ambayo itapata mstari
'2+3', bila kukamata mengine.
Umepewa mstari:
txt = '23 2+3 2++3 2+++3 345 567'
Andika regex, ambayo itapata mistari
'2+3', '2++3', '2+++3',
bila kukamata mengine (+ inaweza kuwa idadi yoyote
ya nyakati).
Umepewa mstari:
txt = '23 2+3 2++3 2+++3 445 677'
Andika regex, ambayo itapata mistari
'23', '2+3', '2++3',
'2+++3', bila kukamata mengine.
Umepewa mstari:
txt = '*+ *q+ *qq+ *qqq+ *qqq qqq+'
Andika regex, ambayo itapata mistari
'*q+', '*qq+', '*qqq+',
bila kukamata mengine.
Umepewa mstari:
txt = '[abc] {abc} abc (abc) [abc]'
Andika regex, ambayo itapata mistari
kwenye mabano mraba na ibadilishe kwa
'!'.