Python ရှိ ရီဂျက်စ် ပုံစံများတွင် Positive နှင့် Negative Lookaround

တစ်ခါတစ်ရံတွင် ဤကဲ့သို့သော ပြဿနာအမျိုးအစားကို ဖြေရှင်းရန် လိုအပ်ပါသည် - စာကြောင်း 'aaa' ကို ရှာဖွေပြီး '!' သို့ အစားထိုးရန်၊ သို့သော် 'aaa' ၏ နောက်တွင် 'x' ရှိမှသာ၊ ထို 'x' ကိုမူ အစားမထိုးဘဲထားရန်။ အကယ်၍ ကျွန်ုပ်တို့သည် ဤအလုပ်ကို 'တိုက်ရိုက်' ဖြေရှင်းရန် ကြိုးစားပါက မအောင်မြင်နိုင်ပါ -

pythontxt = 'aaax baaa'
res = re.sub('aaax', '!', txt)

print(res) # ရလဒ် '! baaa' ကို ပြသမည်၊ သို့သော် ကျွန်ုပ်တို့ လိုချင်သည်မှာ '!x baaa'

Lookahead (ရှေ့ကြိုကြည့်ခြင်း)

ဤပြဿနာကို ဖြေရှင်းရန်၊ 'x' ကို အစားမထိုးရန် ပြောပြနိုင်သည့် နည်းလမ်းတစ်ခု လိုအပ်ပါသည်။ ၎င်းကို အထူးကွင်းစကွင်းပိတ် (?= ) များဖြင့် လုပ်ဆောင်နိုင်ပြီး၊ ထိုကွင်းများသည် ရှေ့သို့ကြည့်၍ ယူဆောင်မသွားပါ။

ဤကွင်းများကို positive lookahead ဟု ခေါ်ပါသည်။ Positive ဆိုသည်မှာ 'x' (ကျွန်ုပ်တို့၏ ကိစ္စတွင်) ရှိရမည် - ထိုအခါမှသာ အစားထိုးခြင်း ဖြစ်မည်။

ကျွန်ုပ်တို့၏ ပြဿနာကို ဖြေရှင်းရန် ဤကွင်းများကို အသုံးပြုကြည့်ပါစို့ -

pythontxt = 'aaax baaa'
res = re.sub('aaa(?=x)', '!', txt)
print(res) # ရလဒ် '!x baaa' ကို ပြသမည်

Negative lookahead လည်းရှိပါသည် - (?! ) - ၎င်းသည် ဆန့်ကျင်ဘက်အနေဖြင့်၊ တစ်စုံတစ်ရာ မရှိရမည်ဟု ဆိုလိုပါသည်။ အောက်ပါ ဥပမာတွင်၊ 'aaa' ၏ နောက်တွင် 'x' မရှိမှသာ အစားထိုးမှု ဖြစ်ပေါ်မည် -

pythontxt = 'aaax aaab'
res = re.sub('aaa(?!x)', '!', txt)

print(res) # ရလဒ် 'aaax !b' ကို ပြသမည်

Lookbehind (နောက်ကြိုကြည့်ခြင်း)

အလားတူပင် positive lookbehind ရှိပါသည် - (?<= )။ အောက်ပါ ဥပမာတွင်၊ 'aaa' ၏ ရှေ့တွင် 'x' ရှိမှသာ အစားထိုးမှု ဖြစ်ပေါ်မည် -

pythontxt = 'xaaa'
res = re.sub('(?<=x)aaa', '!', txt)

print(res) # ရလဒ် 'x!' ကို ပြသမည်

ထို့အပြင် negative lookbehind လည်းရှိပါသည် - (?<! )။ အောက်ပါ ဥပမာတွင်၊ 'aaa' ၏ ရှေ့တွင် 'x' မရှိမှသာ အစားထိုးမှု ဖြစ်ပေါ်မည် -

pythontxt = 'baaa'
res = re.sub('(?<!x)aaa', '!', txt)

print(res) # ရလဒ် 'b!' ကို ပြသမည်

လက်တွေ့လေ့ကျင့်ခန်းများ

Задание 1

အောက်ပါ function အမည်များပါဝင်သည့် စာကြောင်းကို ပေးထားပါသည် -

pythontxt = 'func1() func2() func3()'

ထိုစာကြောင်းမှ function အမည်များ array တစ်ခု ရယူပါ။

Задание 2

အောက်ပါ tag တစ်ခုပါဝင်သည့် စာကြောင်းကို ပေးထားပါသည် -

pythontxt = '<a href="" class="eee" id="zzz">'

ထို tag ၏ attribute အမည်များ array တစ်ခု ရယူပါ။

Задание 3

အောက်ပါ variable များပါဝင်သည့် စာကြောင်းကို ပေးထားပါသည် -

pythontxt = '$aaa $bbb $ccc xxxx'

ဒေါ်လာသင်္ကေတ ($) ၏ ရှေ့တွင်ရှိသော စာကြောင်းခွဲများ (substrings) ကို ရယူပါ။