রেগুলার এক্সপ্রেশন

Regular Expressions বা regex বা regexp হচ্ছে কিছু কারেকটারের সিকোয়েন্স, যা একটা সার্চ প্যাটার্ন তৈরি করে। পুরা লাইনটার মধ্যে সব গুলোই ইংরেজী শব্দ। বাংলা করলে ভয়াবহ হবে। তাহলে ইংরেজীতেই দেখি রেগুলার এক্সপ্রেশন কিঃ

A regular expression is a sequence of characters that forms a search pattern.
যে সার্চ প্যাটার্ণটি তৈরি করে, তা কোন টেক্সট সার্চ করার জন্য অথবা কোন টেক্সট রিপ্লেস করার জন্য ব্যবহৃত হয়। একটা উদারহণ দেওয়া যাক। ধরা যাক আমাদের বিশাল একটা টেক্সট ফাইল দেওয়া হল। যেখানে অনেক গুলো লেখার মাঝে মাঝে ইমেইল ও রয়েছে। আমাদের শুধু ইমেইল গুলো বের করতে হবে। ধরা যাক এক লক্ষ ইমেইল রয়েছে ঐ বিশাল টেক্সট ফাইলের মধ্যে। এখন কাউকে যদি ইমেইল গুলো খুজে বের করতে বলে, তাহলে অনেক সময় লাগবে। আবার অনেক গুলো ইমেইল সে হয়তো চোখের ভুলের কারণে মিস করে যাবে। আমাদের দরকার অটোমেটিক কিছু। আর এ কাজ টাই করে রেগুলার এক্সপ্রেশনে। আমাদের আগে একটা সার্চ প্যাটার্ণ তৈরি করতে হবে। ইমেইল এড্রেসে কি কি থাকে সে গুলো এনালাইসিস করে। যেমন একটা ডকুমেন্ট থেকে ইমেইল গুলো বের করার সার্চ প্যাটার্ণ হতে পারে নিচের মতঃ
এই সার্চ প্যাটার্ণ ব্যবহার করে আমরা সহজেই সকল ইমেইল খুজে বের করে ফেলতে পারব। এখন এক একটা প্রোগ্রামিং ল্যাঙ্গুয়েজে এক এক ভাবে এই রেগুলার এক্সপ্রেশন ব্যবহার করতে হয়।  কি সব লিখছি, তাই তো? একবার বুঝলেই সহজ হয়ে যাবে। উপরের এটা একটা উদারহণ, আমরা আরো ছোট খাটো উদাহরণ দিয়ে দেখব। তারপর কিভাবে কমপ্লেক্স সার্চ প্যাটার্ন তৈরি করতে পারি, তা দেখব।

রেগুলার এক্সপ্রেশন নিয়ে কাজ করার জন্য রেগুলার এক্সপ্রেশন মডিউলটা ইম্পোর্ট করে নিতে হবে। তার জন্য 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 দিয়ে রিপ্লেস করেছি এবং সেগুলো প্রিন্ট করেছি।

1 thought on “রেগুলার এক্সপ্রেশন”

  1. I think সার্চ প্যাটার্ণ নিয়ে আরও একটু আলোচনা করলে ভাল হত। প্রোগ্রামে সার্চ প্যাটার্ণ কিভাবে ব্যবহার করে সেটা বলা উচিত ছিল।

    Reply

Leave a Reply