পাইথনে নিয়মিত এক্সপ্রেশান
এই নিবন্ধে পাইথনের নিয়মিত এক্সপ্রেশান ব্যাখ্যা করা হয়েছে।
আমরা re মডিউলের বেসিক ব্যবহারের থেকে শুরু করে জটিল নিয়মিত এক্সপ্রেশান প্যাটার্নের মেলানো পর্যন্ত বিভিন্ন বিষয় আলোচনা করব।
YouTube Video
পাইথনে নিয়মিত এক্সপ্রেশান
re মডিউল নিয়মিত অভিব্যক্তি ব্যবহার করে স্ট্রিং অনুসন্ধান এবং ম্যানিপুলেশনের জন্য ব্যবহৃত হয়।
re মডিউল কী?
re মডিউল পাইথনের স্ট্যান্ডার্ড লাইব্রেরিতে অন্তর্ভুক্ত এবং এটি নিয়মিত এক্সপ্রেশান ব্যবহার করে স্ট্রিং পরিচালনার জন্য কার্যকারিতা সরবরাহ করে। নিয়মিত এক্সপ্রেশান নির্দিষ্ট স্ট্রিং প্যাটার্ন দ্রুত সন্ধান, বের করা বা প্রতিস্থাপনের জন্য ব্যবহৃত হয়।
মৌলিক নিয়মিত এক্সপ্রেশান প্যাটার্ন
নিয়মিত এক্সপ্রেশান বিশেষ চিহ্ন ব্যবহার করে প্যাটার্ন নির্ধারণ করে। নিচে কিছু মৌলিক প্যাটার্ন দেওয়া হলো।
.: যেকোন একটি অক্ষর^: স্ট্রিংয়ের শুরু$: স্ট্রিংয়ের শেষ\d: যেকোন সংখ্যা (0-9)\w: যেকোন শব্দ অক্ষর (a-z, A-Z, 0-9, _)\s: যেকোন ফাঁকা স্থান চরিত্র*: শূন্য বা বেশি সংখ্যক পুনরাবৃত্তি+: এক বা বেশি সংখ্যক পুনরাবৃত্তি[]: চরিত্র শ্রেণী (যেমন,[a-z]ছোট হাতের বর্ণমালা মেলানো)
1import re
2
3pattern = r"\d{3}-\d{4}"
4text = "My postal code is 123-4567."
5result = re.search(pattern, text)
6if result:
7 print(result.group()) # Output: 123-4567
8
9# Define a pattern using basic regular expression symbols
10pattern = r"^\w+\s\d+\s[a-zA-Z]+$"
11
12# Example text to test the pattern
13text = "Room 23 Tokyo"
14
15# Check if the pattern matches the text
16result = re.match(pattern, text)
17if result:
18 print("Matched:", result.group())
19else:
20 print("No match")- এই কোডটি প্রথমে পরীক্ষা করে যে স্ট্রিংটি পোস্টাল কোডের প্যাটার্নের সাথে মেলে কিনা। এরপর এটি পরীক্ষা করে যে পুরো স্ট্রিংটি (শুরু থেকে শেষ পর্যন্ত) শব্দ, হোয়াইটস্পেস, অঙ্ক, হোয়াইটস্পেস এবং একটি ইংরেজি শব্দ নিয়ে গঠিত প্যাটার্নের সাথে মেলে কিনা। এটি আপনাকে বুঝতে সাহায্য করে রেগুলার এক্সপ্রেশনের মৌলিক উপাদানগুলো কীভাবে একসঙ্গে ব্যবহার করা যায়।
ম্যাচিং ফাংশন কীভাবে ব্যবহার করবেন
re.match()
re.match() যাচাই করে যে স্ট্রিংয়ের শুরু নির্দিষ্ট প্যাটার্নের সাথে মেলে কিনা।
1import re
2
3pattern = r"\w+"
4text = "Python is powerful"
5match = re.match(pattern, text)
6if match:
7 print(match.group()) # Output: Python- এই কোডটি পরীক্ষা করে স্ট্রিংটি একটি word character (অ্যালফানিউমেরিক বা আন্ডারস্কোর) দিয়ে শুরু হয়েছে কিনা। প্রথম শব্দ 'Python' প্যাটার্নটির সাথে মেলে এবং আউটপুট হয়।
re.search()
re.search() পুরো স্ট্রিং স্ক্যান করে এবং প্রথম মিলটি ফেরত দেয়।
1import re
2
3pattern = r"powerful"
4text = "Python is powerful and versatile"
5search = re.search(pattern, text)
6if search:
7 print(search.group()) # Output: powerful- এই কোডটি পুরো স্ট্রিং জুড়ে 'powerful' শব্দটি খোঁজে এবং প্রথম মেলাটিই ফেরত দেয়। ফলস্বরূপ,
re.search()মেলা স্ট্রিং 'powerful' আউটপুট করে।
re.findall()
re.findall() প্যাটার্নের সমস্ত মিল একটি তালিকা হিসাবে ফেরত দেয়।
1import re
2
3pattern = r"\b\w{6}\b"
4text = "Python is powerful and versatile"
5matches = re.findall(pattern, text)
6print(matches) # Output: ['Python', 'strong']- এই কোডটি ঠিক ছয় অক্ষরের সব শব্দ খুঁজে পায় এবং সেগুলোকে একটি তালিকা হিসেবে ফেরত দেয়। স্ট্রিংয়ের 'Python' শর্তটি পূরণ করে, এবং তালিকা
['Python']আউটপুট হয়।
re.finditer()
re.finditer() সমস্ত মিলকে একটি ইটারেটর হিসাবে ফেরত দেয়, যা প্রতিটি মিলে বিস্তারিত তথ্য বের করতে সাহায্য করে।
1import re
2
3pattern = r"\b\w{6}\b"
4text = "Python is powerful and versatile"
5matches = re.finditer(pattern, text)
6for match in matches:
7 print(match.group()) # Output: Python- এই কোডটি ধারাবাহিকভাবে সব ছয়-অক্ষরের শব্দ খোঁজে এবং একটি ইটারেটরের মাধ্যমে প্রতিটি মেলাকে প্রক্রিয়াকরণ করে। 'Python' এখানে প্যাটার্নটির সাথে মেলে এবং আউটপুট হয়।
প্রতিস্থাপন এবং বিভাজন
re.sub()
re.sub() স্ট্রিংয়ের সেই অংশগুলি প্রতিস্থাপন করে যা নিয়মিত অভিব্যক্তির সাথে মিলে যায় অন্য একটি স্ট্রিং দিয়ে।
1import re
2
3pattern = r"\d+"
4text = "There are 100 apples"
5new_text = re.sub(pattern, "many", text)
6print(new_text) # Output: There are many apples- এই কোডটি স্ট্রিংয়ের সব অঙ্ককে 'many' দিয়ে প্রতিস্থাপন করে।
re.split()
re.split() স্ট্রিংটিকে সেই অংশে বিভক্ত করে যা নিয়মিত অভিব্যক্তির সাথে মেলে।
1import re
2
3pattern = r"\s+"
4text = "Python is powerful"
5parts = re.split(pattern, text)
6print(parts) # Output: ['Python', 'is', 'powerful']- এই কোডটি এক বা একাধিক হোয়াইটস্পেস অক্ষরে স্ট্রিংটিকে ভাগ করে। ফলস্বরূপ, স্ট্রিংটি শব্দে বিভক্ত হয় এবং
['Python', 'is', 'powerful']পাওয়া যায়।
গ্রুপ এবং ক্যাপচার
নিয়মিত অভিব্যক্তি গ্রুপিং ব্যবহার করে মিলে যাওয়া উপস্ট্রিংগুলি সহজে বের করা যায়। উচ্চাঙ্গ () দিয়ে আবদ্ধ করা এটিকে একটি গ্রুপ হিসাবে ধরা দেয়।
1import re
2
3pattern = r"(\d{3})-(\d{4})"
4text = "My postal code is 123-4567."
5match = re.search(pattern, text)
6if match:
7 print(match.group(1)) # Output: 123
8 print(match.group(2)) # Output: 4567- এই কোডটি '123-4567' ধরনের একটি পোস্টাল কোড থেকে ৩-অঙ্ক এবং ৪-অঙ্কের সংখ্যাগুলোকে পৃথক গ্রুপ হিসেবে বের করে।
group(1)প্রথম তিনটি অঙ্ক '123' ফেরত দেয়, এবংgroup(2)শেষ চারটি অঙ্ক '4567' ফেরত দেয়।
নামযুক্ত গ্রুপ
নামযুক্ত গ্রুপ ব্যবহার করলে ইনডেক্সের ওপর নির্ভর না করে অর্থপূর্ণ নাম দিয়ে মানগুলো আহরণ করতে পারেন। নিচে একটি নির্দিষ্ট উদাহরণ দেওয়া হলো যা একটি লগ থেকে তারিখ এবং স্তর বের করে।
1import re
2
3log = "2025-10-25 14:00:01 [ERROR] Something failed"
4
5pattern = r"(?P<date>\d{4}-\d{2}-\d{2}) (?P<time>\d{2}:\d{2}:\d{2}) \[(?P<level>[A-Z]+)\] (?P<msg>.*)"
6m = re.search(pattern, log)
7if m:
8 print(m.group("date"), m.group("time"), m.group("level"))
9 print("message:", m.group("msg"))- এই কোডটি নামযুক্ত গ্রুপ ব্যবহার করে একটি লগ স্ট্রিং থেকে তারিখ, সময়, স্তর এবং বার্তা বের করে। এটি ইনডেক্সের বদলে অর্থপূর্ণ নাম ব্যবহার করে মানগুলো আহরণ করে।
ফ্ল্যাগ বিকল্প ব্যবহার করা
re মডিউলে অনুসন্ধানের আচরণ নিয়ন্ত্রণ করার জন্য বিভিন্ন ফ্ল্যাগ বিকল্প রয়েছে।
re.IGNORECASE(re.I): একটি ফ্ল্যাগ বিকল্প যা মিলের ক্ষেত্রে সংবেদনশীলতাকে অগ্রাহ্য করে।re.MULTILINE(re.M): এমন একটি ফ্ল্যাগ বিকল্প যা একাধিক লাইনে মিল খুঁজে পাওয়ার সুবিধা দেয়।re.DOTALL(re.S): একটি ফ্ল্যাগ বিকল্প যা একটি ডট.কে নতুন লাইনের চরিত্রগুলির সাথেও মেলায়।
1import re
2
3pattern = r"python"
4text = "Python is powerful"
5match = re.search(pattern, text, re.IGNORECASE)
6if match:
7 print(match.group()) # Output: Python- এই কোডটি কেস-সংবেদনশীলতা উপেক্ষা করে 'python' শব্দটি খোঁজে।
re.IGNORECASEফ্ল্যাগ ব্যবহার করলে এটি 'Python' এর সাথেও মিলে।
রেগুলার এক্সপ্রেশন অবজেক্ট (re.compile) এর সুবিধাসমূহ
re.compile দিয়ে একটি প্যাটার্ন কম্পাইল করলে পুনর্ব্যবহার আরও দক্ষ হয় এবং পাঠযোগ্যতা বাড়ে। এখানে আপনি ফ্ল্যাগও সেট করতে পারেন।
নিচের উদাহরণটি কম্পাইল করা প্যাটার্ন ব্যবহার করে বহু লাইনে বারবার মিল খোঁজে। আপনি যদি একই প্যাটার্ন বারবার ব্যবহার করেন, তবে সেটি re.compile দিয়ে কম্পাইল করলে কর্মক্ষমতা উন্নত হয়।
1import re
2
3pattern = re.compile(r"User: (\w+), ID: (\d+)")
4text = "User: alice, ID: 1\nUser: bob, ID: 2"
5
6for m in pattern.finditer(text):
7 print(m.groups())- এই কোডটি কম্পাইল করা রেগুলার এক্সপ্রেশন ব্যবহার করে বহু লাইন থেকে ব্যবহারকারীর নাম এবং আইডি বের করে।
re.compileএকই প্যাটার্ন পুনরায় ব্যবহার করার সময় দক্ষতা বাড়ায় এবং কোডটিকে আরও পাঠযোগ্য করে।
প্রয়োগ
উদাহরণস্বরূপ, এমন একটি স্ক্রিপ্ট ভাবুন যা একটি টেক্সট ফাইল থেকে সমস্ত ইমেইল ঠিকানা বের করে।
1import re
2
3pattern = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
4text = "Contact us at info@example.com or support@service.com."
5emails = re.findall(pattern, text)
6print(emails) # Output: ['info@example.com', 'support@service.com']- এই কোডটি স্ট্রিংয়ের সব ইমেইল ঠিকানা খুঁজে বের করে এবং সেগুলোকে একটি তালিকা হিসেবে সংগ্রহ করে।
উপসংহার
re মডিউল পাইথনে স্ট্রিং ম্যানিপুলেশনের জন্য একটি শক্তিশালী সরঞ্জাম। এখানে, আমরা গ্রুপিং এবং ফ্ল্যাগ বিকল্পগুলি ব্যবহার করে মৌলিক ব্যবহারের থেকে উন্নত নিয়মিত অভিব্যক্তি পর্যন্ত একটি বিস্তৃত পরিসর কভার করেছি। পাইথনের নিয়মিত এক্সপ্রেশান খুবই শক্তিশালী এবং টেক্সট প্রসেসিংয়ের জন্য একটি অপরিহার্য সরঞ্জাম।
আপনি আমাদের ইউটিউব চ্যানেলে ভিজ্যুয়াল স্টুডিও কোড ব্যবহার করে উপরের নিবন্ধটি অনুসরণ করতে পারেন। দয়া করে ইউটিউব চ্যানেলটিও দেখুন।