Sitemap

Hand Note on Regular Expressions-Python| Bangla

3 min readJan 4, 2020

১। নিউমেরিক কোন সংখ্যা (০ থেকে ৯ পর্যন্ত) খুঁজে বের করার জন্য “\d” ব্যবহার করা হয়। যতগুলো সংখ্যা প্রয়োজন ততগুলো “\d” লিখতে হবে। যেমন-আমরা যদি কোন স্ট্রিং থেকে ১১ ডিজিটের ফোন নাম্বার সার্চ করতে চাই তাহলে —

২। উপরের রেগুলার এক্সপ্রেশনকে সুন্দরভাবে অপটিমাইজ করার জন্য কার্লি ব্র্যাকেট ব্যবহার করা যায়। কার্লি ব্র্যাকেটের ( {value} ) ভিতরে যে ভ্যালু দেয়া হবে সেই ভ্যালু সংখ্যক নিউমেরিক সংখ্যা ম্যাচ করবে। যেমন-আমরা কার্লি ব্র্যাকেটর মধ্যে ১১ বসালে এটা ১১ টি নিউমেরিক ডিজিট ম্যাচ করবে।

৩। কার্লি ব্র্যাকেটর মধ্যে রেঞ্জও বসানো যায় অর্থাৎ মিনিমাম এবং ম্যাক্সিমাম- {Min, Max} । রেঞ্জ Greedy অ্যালগরিদম অনুসরণ করে অর্থাৎ সর্বোচ্চ সংখ্যক পসিবিলিটিকে ম্যাচ করার চেষ্টা করে [Non Greedy করার জন্য কার্লি ব্র্যাকেটর পর প্রশ্নবোধক ক্যারেকটার ব্যবহার করতে হবে] । যেমন, আমরা যদি সর্বোনিম্ন ৫ টি সংখ্যা এবং সর্বোচ্চ ১১ টি সংখ্যা ম্যাচ করবে এমন রেগুলার এক্সপ্রেশন লিখি তবে এটা সর্বোচ্চ সংখ্যক ম্যাচ করার চেষ্টা করবে।

৪। রেগুলার এক্সপ্রেশন লিখার ক্ষেত্রে কোন নির্দিষ্ট প্যাটার্ন সহজে খুঁজে বের করার জন্য ছোট ছোট গ্রুপ করে প্যাটার্ণ তৈরি করা হয়। গ্রুপ তৈরি করার জন্য প্রথম বন্ধনী ব্যবহার করা হয়। উদাহরণ স্বরূপ, আমরা যদি 01740–999768 এই ফরমেটের কোন নাম্বার খুঁজে বের করতে চাই তাহলে দুইটা গ্রুপে ভাগ করে খুঁজতে পারি। যেমন-

৫। নিদির্ষ্ট কিছু ফরমেট স্পেসিফায়ার এর কাজ:

  • \d — 0 থেকে 9পর্যন্ত যেকোন সংখ্যা ম্যাচ করার জন্য।
  • \D — 0 থেকে 9 ব্যতিত যেকোন ক্যারেক্টার ম্যাচ করার জন্য।
  • \w — যেকোন অক্ষর, সংখ্যা বা আন্ডার স্কোর ম্যাচ করার জন্য। অর্থাৎ word ম্যাচ করার জন্য।
  • \W — অক্ষর, সংখ্যা বা আন্ডার স্কোর ব্যতিত অন্য যেকোন কিছু ম্যাচ করার জন্য।
  • \s — যেকোন স্পেস, ট্যাব বা নিউ লাইন ম্যাচ করার জন্য।
  • \S — স্পেস, ট্যাব বা নিউ লাইন ব্যতিত অন্য যেকোন কিছু ম্যাচ করার জন্য।

৬। লজিক্যাল অর(OR) ব্যবহার করার জন্য “|” ব্যবহার করা হয়, এটাকে পাইপ ক্যারেক্টার বলা হয়। যেমন- Bangla এর পর desh অথবা deshi যেকোন একটা থাকলেই ম্যাচ করবে এমন এক্সপ্রেশন লিখার ক্ষেত্রে-

৭। কোন গ্রুপ বা প্যার্টানের পর প্রশ্নবোধক “?” থাকলে বুঝায় ঐ গ্রুপটি একবার থাকবে অথবা নাও থাকতে পারে। 0 or 1 one time. যেমন-আমরা চাই (desh) গ্রুপটি নাও থাকতে পারে অথবা সর্বোচ্চ হলে একবার থাকবে।

৮। কোন গ্রুপ বা প্যার্টানের পর অ্যাসটেরিক “*” থাকলে বুঝায় ঐ গ্রুপটি এক বা অনেকবার থাকবে অথবা নাও থাকতে পারে। 0 or more time. যেমন — Banana এর Ba এর পরে যত সংখ্যকই na থাকুক না কেন সেটা ম্যাচ করার জন্য অ্যাসটেরিক ব্যবহার করা হয়, আবার na নামক কোন কিছু যদি নাও থাকে তাহলে শুধু Ba ম্যাচ করবে। যেমন-

৯। কোন গ্রুপ বা প্যার্টানের পর প্লাস “+” থাকলে বুঝায় ঐ গ্রুপটি অবশ্যই একবার থাকতে হবে এবং একের অধিকও থাকতে পারে। 1 or more time. যেমন — “Bangla” এর পর যদি +(desh) ব্যবহার করি তবে দেশ প্যাটার্ণটি অবশ্যই কমপক্ষে ১ বার থাকতে হবে।

১০। রেগুলার এক্সপ্রেশনের একদম শুরুতে যদি “^” ব্যবহার করা হয়, তবে যে স্ট্রিং এ সার্চ করতে হবে, তার শুরুতে অবশ্যই “^” এর পরের গ্রুপটি থাকতে হবে। যেমন- r“^Hello” ব্যবহার করলে ঐ স্ট্রিংএর শুরুতে অবশ্যই Hello শব্দটি থাকতে হবে।

Get MSI Shafik’s stories in your inbox

Join Medium for free to get updates from this writer.

১১। রেগুলার এক্সপ্রেশনের একদম শেষে যদি ডলার সাইন “$” ব্যবহার করা হয়, তবে যে স্ট্রিং এ সার্চ করতে হবে, তার শেষে অবশ্যই “$” এর আগের গ্রুপটি থাকতে হবে। যেমন- r“world$” ব্যবহার করলে ঐ স্ট্রিংএর শেষে অবশ্যই world শব্দটি থাকতে হবে।

১২। রেগুলার এক্সপ্রেশনের শুরুতে “^” এবং শেষে “$” ব্যবহার করলে সম্পূর্ণ স্ট্রিং টিকেই ম্যাচ করতে হবে। স্ট্রিং (যেমন- ফোন , ইমেল ইত্যাদি) এর ভ্যালিডেশন চেকিং এর ক্ষেত্রে সাধারণত ব্যবহার করা হয়।

১৩। কাস্টম ক্যারেক্টার ক্লাস ব্যবহার করার জন্য তৃতীয় বন্ধনী “[ ]” ব্যবহার করা হয়। যেমন- যদি কোন স্ট্রিং থেকে সবগুলো vowel বের করতে চাই তাহলে r“[aeiouAEIOU]” ব্যবহার করতে হবে। [ ] এর ভিতরে যে ক্যারেক্টারগুলো থাকবে সেগুলো থেকে ম্যাচ করবে। উল্লেখ্য যে, [ ]এর ভিতরের শুরুতে এটা “^” ব্যবহার করলে [ ]এর ভিতরের গুলো বাদে বাকীগুলো ম্যাচ করবে। অর্থাৎ এইক্ষেত্রে সবগুলো Vowel বাদে সবগুলো Consonant ম্যাচ করবে।

১৪। ডট (.) থাকলে নিউ লাইন বাদে যেকোন সিঙ্গেল ক্যারেকটার ম্যাচ করবে। সুতরাং “.*” ব্যবহার করলে নিউ লাইন বাদে যেকোন সংখ্যক যেকোন কিছু ম্যাচ করবে। তবে এটাও Greedy অ্যালগরিদম অনুসরণ করে। Non Greedy করার জন্য “?” ব্যবহার করতে হবে। যেমন-

১৪। যদি কোন স্ট্রিং এ “?”, “*”, “^” , “+” ইত্যাদি স্পেশাল ক্যারেক্টারগুলো ম্যাচ করার প্রয়োজন হয়, তবে এই চিহৃগুলোর আগে ব্যাক স্ল্যাশ (\) ব্যবহার করতে হবে। যেমন- যদি “name?” ম্যাচ করতে চাই, তাহলে r“name\?” । অর্থাৎ ব্যাক স্ল্যাশের পর যা থাকবে সেটাই ম্যাচ করবে।

[If you find any inconsistency, please let me know, Thank you]