Regular Expressions বা regex বা regexp হচ্ছে কিছু কারেকটারের সিকোয়েন্স, যা একটা সার্চ প্যাটার্ন তৈরি করে। পুরা লাইনটার মধ্যে সব গুলোই ইংরেজী শব্দ। বাংলা করলে ভয়াবহ হবে। তাহলে ইংরেজীতেই দেখি রেগুলার এক্সপ্রেশন কিঃ
রেগুলার এক্সপ্রেশন নিয়ে কাজ করার জন্য রেগুলার এক্সপ্রেশন মডিউলটা ইম্পোর্ট করে নিতে হবে। তার জন্য import re যুক্ত করে নিতে হবে।
ছোট বেলায় সবাই পড়ছি The Lion and the Mouse এর গল্পটি। আমরা যে ফোল্ডারে পাইথন প্রোগ্রাম লিখছি, সেখানে file.txt নামে একটি ফাইল তৈরি করি। ঐ ফাইলে আমাদের রেগুলার এক্সপ্রেশন নিয়ে কাজ করার জন্য গল্পটি file.txt এ রাখিঃ
Once when a Lion was asleep, a little Mouse began running up and down upon him. This soon wakened the Lion, who placed his huge paw upon him and opened his big jaws to swallow him. "Pardon, O King!" cried the little Mouse, "Forgive me this time. I shall never repeat it and I shall never forget your kindness. And who knows, but I may be able to do you a good turn one of these days?" The Lion was so tickled at the idea of the Mouse being able to help him, that he lifted up his paw and let him go. Short Stories Sometime later a few hunters captured the King and tied him to a tree while they went in search of a wagon to carry him on. Just then the little Mouse happened to pass by, and seeing the sad plight in which the Lion was, ran up to him and soon gnawed away the ropes that bound the King of the Beasts. "Was I not right?" said the little Mouse, very happy to help the Lion.
নিচের প্রোগ্রামটি দেখিঃ
import re file = open('file.txt') for line in file: if re.search( '(waken|open)ed', line): print (line)
এখানে ফাইলটি ওপেন করা হয়েছে। এরপর এর প্রতিটি লাইনের জন্য wakened এবং opened দ দুইটা শব্দ সার্চ করা হয়েছে। “|” মানে হচ্ছে অথবা। OR
wakened এবং opened এ শেষে ed কমন রয়েছে। তাই আমরা দুইটা শব্দকে এভাবে লিখতে পারিঃ (weken অথবা open)ed, কম নেওয়ার মত। আর রেগুলার এক্সপ্রেশনে এটা লিখে এভাবেঃ (waken| open)ed
আর উপরের প্রোগ্রামে যখন এ দুইটি ওয়ার্ডের যে কোন একটা পাবে, তাহলে ঐ লাইনটি প্রিন্ট করবে। আমাদের উপরের গল্পএ wakened এবং opened দুইটি একই লাইনে। তাই একটা লাইনই প্রিন্ট করবে।
আমরা কোন স্ট্রিং গ্রুপ ম্যাচ করে কিনা, তা চেক করতে পারি এভাবেঃ
import re file = open( 'file.txt') for line in file: match = re.search( '(waken|happen)ed ' , line) if match : print ( match.group())
আমরা যদি একটা স্ট্রিং সার্চ করে তা রিপ্লেস করতে চাই, তাহলে লিখব এভাবেঃ
re.sub মেথড দিয়ে স্ট্রিং প্যাটার্ন সার্চ এবং রিপ্লেস করা হয়।
import re file = open( 'file.txt') for line in file: print (re.sub( 'Lion' ,'Tiger' ,line))
এখানে আমরা Lion শব্দটিকে Tiger দিয়ে রিপ্লেস করেছি এবং সেগুলো প্রিন্ট করেছি।
I think সার্চ প্যাটার্ণ নিয়ে আরও একটু আলোচনা করলে ভাল হত। প্রোগ্রামে সার্চ প্যাটার্ণ কিভাবে ব্যবহার করে সেটা বলা উচিত ছিল।