Python ရှိ ရီဂျူလာ ဖော်ပြချက်များတွင် အလောဘကို ကန့်သတ်ခြင်း
ရီဂျူလာ ဖော်ပြချက်များသည် နဂိုအတိုင်း အလောဘရှိပါသည်။ ၎င်းဆိုလိုသည်မှာ ၎င်းတို့သည် ဖြစ်နိုင်သမျှ စာလုံးအများဆုံးကို ဖမ်းယူကြသည်။ ဥပမာတစ်ခုဖြင့် လေ့လာကြည့်ကြပါစို့။ ကျွန်ုပ်တို့တွင် ဤကဲ့သို့သော စာကြောင်းတစ်ခု ရှိသည်ဆိုပါစို့:
txt = 'aeeex zzz x kkk'
ဤစာကြောင်းထဲတွင် အောက်ပါပုံစံအတိုင်း
အကြောင်းအရာ'aeeex' ကို ရှာလိုပါသည်:
စာလုံး 'a'၊ ထို့နောက် မည်သည့်စာလုံးမဆို
တစ်ကြိမ် သို့မဟုတ် တစ်ကြိမ်ထက်ပိုပြီး၊ ထို့နောက် စာလုံး 'x':
res = re.sub('a.+x', '!', txt)
print(res)
ကျွန်ုပ်တို့အနေဖြင့် စာကြောင်း '! zzz
x kkk' ကို ရရှိရန်လိုအပ်သော်လည်း၊ စာကြောင်း '! kkk' ကို ထုတ်ပြလိမ့်မည်။
ပြဿနာအားလုံးမှာ ကျွန်ုပ်တို့၏ ရီဂျူလာ ဖော်ပြချက်သည်
စာလုံး 'a' မှ စာလုံး 'x' အထိ ရှိသမျှ စာလုံးများကို ရှာဖွေနေခြင်းကြောင့် ဖြစ်သည်။
သို့သော် ကျွန်ုပ်တို့၏ စာကြောင်းထဲတွင် 'x' စာလုံးနှစ်လုံး
ရှိသည်'x'! အလောဘရှိမှုကြောင့် ရီဂျူလာ ဖော်ပြချက်သည်
နောက်ဆုံး 'x' အထိ ရှာဖွေနေပြီး၊ ဤနည်းအားဖြင့် ကျွန်ုပ်တို့လိုအပ်သည့်
အရာမဟုတ်သည်ကို ဖမ်းယူနေသည်။
သေချာသည်မှာ၊ မကြာခဏ ထိုသို့သော အပြုအမူသည် ကျွန်ုပ်တို့အတွက် လိုအပ်ပါသည်။ သို့သော် ဤကိစ္စတွင်မူ အလောဘကို ပယ်ဖျက်ပြီး ရီဂျူလာ ဖော်ပြချက်အား ပထမ 'x' ကိုရောက်သည်အထိသာ ရှာဖွေရန် ပြောရန် လိုအပ်သည်။ ဤ ကိစ္စတွင် ထပ်ခါတလဲလဲပြုလုပ်သော အော်ပရေတာ၏ နောက်တွင် မေးခွန်းသင်္ကေတကို ထားရှိရမည်:
res = re.sub('a.+?x', '!', txt)
print(res) # စာကြောင်း '! zzz x kkk' ကို ထုတ်ပြလိမ့်မည်
ထပ်ခါတလဲလဲပြုလုပ်သော အော်ပရေတာအားလုံးတွင် အလောဘကို ကန့်သတ်နိုင်သည်:
* နှင့် ?၊ နှင့်
{} - ဤသို့ဖြစ်သည်: *?, ??
နှင့် {}?။
စာကြောင်းတစ်ခု ပေးထားသည်:
txt = 'aba accca azzza wwwwa'
အစွန်းနှစ်ဖက်တွင် စာလုံး'a' ရှိသော
စာကြောင်းများအားလုံးကို ရှာဖွေပေးမည့် ရီဂျူလာ ဖော်ပြချက်တစ်ခု ရေးပြီး၊
သူတို့တစ်ခုချင်းစီကို '!' ဖြင့် အစားထိုးပါ။
စာလုံး'a' များကြားတွင် မည်သည့်စာလုံးမဆို ('a' မှလွဲ၍) ရှိနိုင်သည်။