Uchunguzi wa Mbele na Nyuma Chanya na Hasifi katika Usanifu wa Kawaida wa Python
Wakati mwingine unahitaji kutatua tatizo la aina hii:
pata mfuatano 'aaa' na uibadilishe
kuwa '!', lakini tu ikiwa baada ya
'aaa' kuna 'x', na
'x' yenyewe usiibadilishe. Ikiwa tutajaribu
kutatua tatizo 'moja kwa moja',
hatutafanikiwa:
txt = 'aaax baaa'
res = re.sub('aaax', '!', txt)
print(res) # itatoa '! baaa', lakini tulitaka '!x baaa'
Uchunguzi wa Mbele
Ili kutatua tatizo unahitaji njia ya kusema,
kwamba 'x' haifai kubadilishwa. Hii
inafanywa kwa kutumia mabano maalum (?= ),
ambayo hutazama tu, lakini haichukui
pamoja nayo.
Mabano haya yanaitwa uchunguzi chanya wa mbele.
Chanya - kwa sababu 'x'
(katika kesi yetu) inapaswa kuwepo - ndio tu basi
badala itatokea.
Wacha tutumie mabano haya kutatua tatizo letu:
txt = 'aaax baaa'
res = re.sub('aaa(?=x)', '!', txt)
print(res) # itatoa '!x aaab
Kuna pia uchunguzi hasifi wa mbele
- (?! ) - ambayo, kinyume chake, inasema,
kwamba kitu hakipaswi kuwepo. Katika mfano
ufuatao, badala itatokea, tu ikiwa
baada ya 'aaa' hakuna 'x':
txt = 'aaax aaab'
res = re.sub('aaa(?!x)', '!', txt)
print(res) # itatoa 'aaax !b'
Uchunguzi wa Nyuma
Vivyo hivyo kuna uchunguzi chanya
wa nyuma - (?<= ). Katika
mfano ufuatao badala itatokea, tu
ikiwa kabla ya 'aaa' kuna 'x':
txt = 'xaaa'
res = re.sub('(?<=x)aaa', '!', txt)
print(res) # itatoa 'x!'
Na kuna pia uchunguzi hasifi wa nyuma
- (?<! ). Katika mfano ufuatao
badala itatokea, tu ikiwa kabla ya
'aaa' hakuna 'x':
txt = 'baaa'
res = re.sub('(?<!x)aaa', '!', txt)
print(res) # itatoa 'b!'
Matatizo ya Vitendo
Kuna mfuatano ulio na majina ya vitendakazi:
txt = 'func1() func2() func3()'
Pata safu ya majina ya vitendakazi kutoka kwenye mfuatano.
Kuna mfuatano na kitambulisho:
txt = '<a href="" class="eee" id="zzz">'
Pata safu ya majina ya sifa za kitambulisho hiki.
Kuna mfuatano na vigezo:
txt = '$aaa $bbb $ccc xxxx'
Pata sehemu ndogo za mfuatano, ambazo ziko mbele ya ishara ya dola.