Python ရှိ Regular Expression များတွင် Non-Capturing Parentheses များ
ကွင်းစကွင်းပိတ် ( ) တွေက အလုပ်နှစ်မျိုးလုပ်ပါတယ် -
�ာလုံးများကို အုပ်စုဖွဲ့ခြင်းနှင့် capturing group (ကပ်မှတ်) အဖြစ်လုပ်ဆောင်ခြင်းပဲဖြစ်ပါတယ်။
ဒါဆို အုပ်စုဖွဲ့ချင်ပေမယ့် capturing group ထဲ မထည့်ချင်ဘူးဆိုရင်ကော ဘယ်လိုလုပ်မလဲ။ ဒီပြဿနာကိုဖြေရှင်းဖို့အတွက်
�ထူး non-capturing parentheses (?: ) ကိုတီထွင်ထားပါတယ် - ၎င်းတို့ဟာ အုပ်စုဖွဲ့ပေးတယ်၊
ဒါပေမယ့် capturing group ထဲမှာ မသိမ်းဆည်းပါဘူး။
ဥပမာ
အောက်ပါဥပမာမှာ ပထမကွင်းတွေကို အုပ်စုဖွဲ့ဖို့အတွက် လိုအပ်ပြီး ဒုတိယကွင်းတွေကတော့ capturing group အတွက်ပါ။ ဒါပေမယ့် ကွင်းနှစ်မျိုးစလုံးဟာ capturing group ထဲကို ဒေတာတွေ သိမ်းဆည်းပေးပါတယ်။
txt = 'abab123'
res = re.search('(ab)+([1-9]+)', txt)
ရလဒ်အနေနဲ့ ကျွန်ုပ်တို့ရဲ့ capturing groups တွေမှာ အောက်ပါအတိုင်းရှိလာပါလိမ့်မယ်။
print(res[0]) # 'abab123' ကိုပြသမည်
print(res[1]) # 'ab' ကိုပြသမည်
print(res[2]) # '123' ကိုပြသမည်
ဥပမာ
ပထမကွင်းစုံက အုပ်စုဖွဲ့ရုံပဲလုပ်ပြီး capturing group ထဲ မထည့်အောင်လုပ်ကြည့်ရအောင်။
txt = 'abab123'
res = re.search('(?:ab)+([1-9]+)', txt)
ရလဒ်အနေနဲ့ ပထမ capturing group ထဲမှာ ကျွန်ုပ်တို့ရဲ့ ဂဏန်းတွေပဲရှိပါလိမ့်မယ်။
print(res[1]) # '123' ကိုပြသမည်