Python ရှိ ရီဂျက်စ် ပုံစံများတွင် Positive နှင့် Negative Lookaround
တစ်ခါတစ်ရံတွင် ဤကဲ့သို့သော ပြဿနာအမျိုးအစားကို ဖြေရှင်းရန် လိုအပ်ပါသည် -
စာကြောင်း 'aaa' ကို ရှာဖွေပြီး '!' သို့ အစားထိုးရန်၊ သို့သော် 'aaa' ၏ နောက်တွင် 'x' ရှိမှသာ၊ ထို 'x' ကိုမူ အစားမထိုးဘဲထားရန်။ အကယ်၍ ကျွန်ုပ်တို့သည် ဤအလုပ်ကို 'တိုက်ရိုက်' ဖြေရှင်းရန် ကြိုးစားပါက မအောင်မြင်နိုင်ပါ -
txt = 'aaax baaa'
res = re.sub('aaax', '!', txt)
print(res) # ရလဒ် '! baaa' ကို ပြသမည်၊ သို့သော် ကျွန်ုပ်တို့ လိုချင်သည်မှာ '!x baaa'
Lookahead (ရှေ့ကြိုကြည့်ခြင်း)
ဤပြဿနာကို ဖြေရှင်းရန်၊ 'x' ကို အစားမထိုးရန် ပြောပြနိုင်သည့် နည်းလမ်းတစ်ခု လိုအပ်ပါသည်။ ၎င်းကို အထူးကွင်းစကွင်းပိတ် (?= ) များဖြင့် လုပ်ဆောင်နိုင်ပြီး၊ ထိုကွင်းများသည် ရှေ့သို့ကြည့်၍ ယူဆောင်မသွားပါ။
ဤကွင်းများကို positive lookahead ဟု ခေါ်ပါသည်။ Positive ဆိုသည်မှာ 'x' (ကျွန်ုပ်တို့၏ ကိစ္စတွင်) ရှိရမည် - ထိုအခါမှသာ အစားထိုးခြင်း ဖြစ်မည်။
ကျွန်ုပ်တို့၏ ပြဿနာကို ဖြေရှင်းရန် ဤကွင်းများကို အသုံးပြုကြည့်ပါစို့ -
txt = 'aaax baaa'
res = re.sub('aaa(?=x)', '!', txt)
print(res) # ရလဒ် '!x baaa' ကို ပြသမည်
Negative lookahead လည်းရှိပါသည် - (?! ) - ၎င်းသည် ဆန့်ကျင်ဘက်အနေဖြင့်၊ တစ်စုံတစ်ရာ မရှိရမည်ဟု ဆိုလိုပါသည်။ အောက်ပါ ဥပမာတွင်၊ 'aaa' ၏ နောက်တွင် 'x' မရှိမှသာ အစားထိုးမှု ဖြစ်ပေါ်မည် -
txt = 'aaax aaab'
res = re.sub('aaa(?!x)', '!', txt)
print(res) # ရလဒ် 'aaax !b' ကို ပြသမည်
Lookbehind (နောက်ကြိုကြည့်ခြင်း)
အလားတူပင် positive lookbehind ရှိပါသည် - (?<= )။ အောက်ပါ ဥပမာတွင်၊ 'aaa' ၏ ရှေ့တွင် 'x' ရှိမှသာ အစားထိုးမှု ဖြစ်ပေါ်မည် -
txt = 'xaaa'
res = re.sub('(?<=x)aaa', '!', txt)
print(res) # ရလဒ် 'x!' ကို ပြသမည်
ထို့အပြင် negative lookbehind လည်းရှိပါသည် - (?<! )။ အောက်ပါ ဥပမာတွင်၊ 'aaa' ၏ ရှေ့တွင် 'x' မရှိမှသာ အစားထိုးမှု ဖြစ်ပေါ်မည် -
txt = 'baaa'
res = re.sub('(?<!x)aaa', '!', txt)
print(res) # ရလဒ် 'b!' ကို ပြသမည်
လက်တွေ့လေ့ကျင့်ခန်းများ
အောက်ပါ function အမည်များပါဝင်သည့် စာကြောင်းကို ပေးထားပါသည် -
txt = 'func1() func2() func3()'
ထိုစာကြောင်းမှ function အမည်များ array တစ်ခု ရယူပါ။
အောက်ပါ tag တစ်ခုပါဝင်သည့် စာကြောင်းကို ပေးထားပါသည် -
txt = '<a href="" class="eee" id="zzz">'
ထို tag ၏ attribute အမည်များ array တစ်ခု ရယူပါ။
အောက်ပါ variable များပါဝင်သည့် စာကြောင်းကို ပေးထားပါသည် -
txt = '$aaa $bbb $ccc xxxx'
ဒေါ်လာသင်္ကေတ ($) ၏ ရှေ့တွင်ရှိသော စာကြောင်းခွဲများ (substrings) ကို ရယူပါ။