Python တွင် Regular Expression များတွင် အထူးစာလုံးများကို Escape လုပ်ခြင်း
အထူးစာလုံးတစ်လုံးကို မိမိကိုယ်တိုင် ကိုယ်စားပြုစေလိုသည်ဆိုပါစို့။ ၎င်းအတွက် backslash (\) ကိုအသုံးပြု၍ ၎င်းအထူးစာလုံးကို escape လုပ်ရပါမည်။ ဥပမာများဖြင့် ကြည့်ရအောင်။
ဥပမာ
အောက်ပါဥပမာတွင်၊ regular expression ရေးသူသည် ရှာဖွေမှုပုံစံ (pattern) ကို ဤသို့ဖြစ်စေလိုသည် - 'a' စာလုံး
၊ ထို့နောက် အပေါင်း '+'၊ ထို့နောက် 'x' စာလုံး။ သို့သော်၊ ကုဒ်ရေးသူသည်
'+' သင်္ကေတကို escape မလုပ်ထားသဖြင့်
တကယ့်ရှာဖွေမှုပုံစံမှာ ဤသို့ဖြစ်နေသည်-
'a' စာလုံး'a' တစ်ကြိမ် (သို့) တစ်ကြိမ်ထက်ပို၍၊
ထို့နောက် 'x' စာလုံး'x'-
txt = 'a+x ax aax aaax'
res = re.sub('a+x', '!', txt)
print(res)
ကုဒ်ဖြင့် ရလဒ်-
'a+x ! ! !'
ဥပမာ
ယခုတစ်ခါ ရေးသူသည် အပေါင်းသင်္ကေတကို backslash ဖြင့် escape လုပ်ထားသည်။
ယခုဆိုလျှင် ရှာဖွေမှုပုံစံမှာ လိုအပ်သလို ဖြစ်နေပါပြီ- 'a' စာလုံး
'a'၊ ထို့နောက် အပေါင်း
'+'၊ ထို့နောက် 'x' စာလုံး'x'-
txt = 'a+x ax aax aaax'
res = re.sub('a\+x', '!', txt)
print(res)
ကုဒ်ဖြင့် ရလဒ်-
'! ax aax aaax'
ဥပမာ
ဤဥပမာတွင် ပုံစံမှာ ဤသို့ဖြစ်သည်-
'a' စာလုံး'a'၊ ထို့နောက် အစက်'.',
ထို့နောက် 'x' စာလုံး'x'-
txt = 'a.x abx azx'
res = re.sub('a\.x', '!', txt)
print(res)
ကုဒ်ဖြင့် ရလဒ်-
'! abx azx'
ဥပမာ
အောက်ပါဥပမာတွင် ရေးသူသည် အစက်ကို escape လုပ်ရန် မေ့သွားပြီး �စက်မထောက်လှမ်းထားသောကြောင့် မည်သည့်စာလုံးမဆို ကိုက်ညီနိုင်သဖြင့် စာကြောင်းခွဲအားလုံးနှင့် ကိုက်ညီသွားသည်-
txt = 'a.x abx azx'
res = re.sub('a.x', '!', txt)
print(res)
ကုဒ်ဖြင့် ရလဒ်-
'! ! !'
မှတ်ချက်
အစက်သင်္ကေတကို မိမိကိုယ်တိုင်ကိုယ်စားပြုစေလိုသည့်အခါ backslash ကို မေ့သွားလျှင် (သို့) မထည့်မိလျှင် သတိထားမိမည်မဟုတ်ပါ-
res = re.sub('a.x', '!', 'a.x')
print(res) # '!' ကို ပြန်ပေးမည်၊ ကျွန်ုပ်တို့လိုချင်သည့်အတိုင်း
မျက်မြင်အားဖြင့် အလုပ်လုပ်နေသကဲ့သို့ရှိသည် (အကြောင်းမှာ အစက်သည် မည်သည့်စာလုံးကိုမဆို ကိုယ်စားပြုနိုင်ပြီး
သာမန်အစက်'.' လည်း အပါအဝင်ဖြစ်သောကြောင့်)။ သို့သော် အစားထိုးမှုပြုလုပ်မည့်
စာကြောင်းကို ပြောင်းလိုက်လျှင် ကျွန်ုပ်တို့၏ အမှားကို တွေ့မြင်ရမည်-
res = re.sub('a.x', '!', 'a.x abx azx')
print(res) # '! ! !' ကို ပြန်ပေးမည်၊ မျှော်လင့်ထားသည်မှာ '! abx azx'
အထူးသင်္ကေတများနှင့် သာမန်သင်္ကေတများ စာရင်း
သာမန်စာလုံးတစ်လုံးကို escape လုပ်လျှင် ဘာမှမဖြစ်ပါ - ၎င်းသည် မိမိကိုယ်တိုင်ကိုယ်စားပြုနေဦးမည်။ ခြွင်းချက်မှာ ဂဏန်းများဖြစ်ပြီး ၎င်းတို့ကို escape မလုပ်နိုင်ပါ။
ပေးထားသော သင်္ကေတတစ်ခုသည် အထူးသင်္ကေတ (special character) ဟုတ်မဟုတ် သံသယဝင်တတ်ပါသည်။ အချို့သည် သံသယရှိသော သင်္ကေတအားလုံးကို ရှေ့ဆက်တိုး၍ escape လုပ်တတ်ကြသည်။ သို့သော်၊ ဤသည် မကောင်းသောအလေ့အကျင့်တစ်ခုဖြစ်သည် (regular expression ကို backslash များဖြင့် ရှုပ်ထွေးစေသည်)။
အထူးသင်္ကေတများမှာ- $ ^ . * + ? \ / {} [] () |
အထူးသင်္ကေတများ မဟုတ်ပါ- @ : , ' " - _ = < > % # ~ `& !
လက်တွေ့လေ့ကျင့်ခန်းများ
စာကြောင်းတစ်ခုပေးထားသည်-
txt = 'a.a aba aea'
'a.a' စာကြောင်းခွဲကို ကျန်အရာများကို မကောက်ယူဘဲ ရှာဖွေပေးမည့် regular expression တစ်ခုကို ရေးပါ။
စာကြောင်းတစ်ခုပေးထားသည်-
txt = '2+3 223 2223'
'2+3' စာကြောင်းခွဲကို ကျန်အရာများကို မကောက်ယူဘဲ ရှာဖွေပေးမည့် regular expression တစ်ခုကို ရေးပါ။
စာကြောင်းတစ်ခုပေးထားသည်-
txt = '23 2+3 2++3 2+++3 345 567'
'2+3'၊ '2++3'၊ '2+++3' စာကြောင်းခွဲများကို
ကျန်အရာများကို မကောက်ယူဘဲ ရှာဖွေပေးမည့် regular expression တစ်ခုကို ရေးပါ
(+ သည် မည်မျှပမာဏရှိသည်ဖြစ်စေ ကိုက်ညီမည်)။
စာကြောင်းတစ်ခုပေးထားသည်-
txt = '23 2+3 2++3 2+++3 445 677'
'23'၊ '2+3'၊ '2++3'၊
'2+++3' စာကြောင်းခွဲများကို ကျန်အရာများကို မကောက်ယူဘဲ ရှာဖွေပေးမည့် regular expression တစ်ခုကို ရေးပါ။
စာကြောင်းတစ်ခုပေးထားသည်-
txt = '*+ *q+ *qq+ *qqq+ *qqq qqq+'
'*q+'၊ '*qq+'၊ '*qqq+' စာကြောင်းခွဲများကို
ကျန်အရာများကို မကောက်ယူဘဲ ရှာဖွေပေးမည့် regular expression တစ်ခုကို ရေးပါ။
စာကြောင်းတစ်ခုပေးထားသည်-
txt = '[abc] {abc} abc (abc) [abc]'
စတုရန်းကွင်းထဲတွင်ရှိသော စာကြောင်းခွဲများကို ရှာဖွေပြီး
၎င်းတို့ကို '!' ဖြင့် အစားထိုးပေးမည့် regular expression တစ်ခုကို ရေးပါ။