Python RegEx

পাইথন রেগুলার এক্সপ্রেশন শিখুন

Python RegEx

একটি RegEx, বা রেগুলার এক্সপ্রেশন, অক্ষরের একটি ক্রম যা একটি অনুসন্ধান প্যাটার্ন তৈরি করে।

একটি স্ট্রিং একটি নির্দিষ্ট অনুসন্ধান প্যাটার্ন রয়েছে কিনা তা পরীক্ষা করতে RegEx ব্যবহার করা যেতে পারে।

RegEx মডিউল

পাইথনে একটি বিল্ট-ইন প্যাকেজ রয়েছে যাকে বলা হয় re যা রেগুলার এক্সপ্রেশনের সাথে কাজ করতে ব্যবহার করা যেতে পারে।

import re

পাইথনে RegEx

আপনি পুনরায় মডিউল আমদানি করার পরে, আপনি নিয়মিত এক্সপ্রেশন ব্যবহার শুরু করতে পারেন:

উদাহরণ

স্ট্রিংটি "The" দিয়ে শুরু হয় এবং "Spain" দিয়ে শেষ হয় কিনা তা পরীক্ষা করুন:

import re

txt = "The rain in Spain"
x = re.search("^The.*Spain$", txt)

RegEx ফাংশন

re মডিউল ফাংশনগুলির একটি সেট সরবরাহ করে যা একটি স্ট্রিংয়ে একটি মিল অনুসন্ধান করার অনুমতি দেয়:

findall()

সমস্ত মিল সম্বলিত একটি তালিকা প্রদান করে।

search()

স্ট্রিং এর কোথাও মিল থাকলে একটি বস্তু প্রদান করে।

split()

একটি তালিকা প্রদান করে যেখানে প্রতিটি মিল দ্বারা স্ট্রিং আলাদা করা হয়।

sub()

আপনার পছন্দের পাঠ্যের সাথে মিলগুলি প্রতিস্থাপন করে।

findall() উদাহরণ

import re

txt = "The rain in Spain"
x = re.findall("ai", txt)
print(x)
আউটপুট:
['ai', 'ai']

মেটাক্যারেক্টার

মেটা অক্ষর হল বিশেষ অর্থ সহ অক্ষর:

লেখা ব্যাখ্যা উদাহরণ
[] চিঠির সংগ্রহ "[a-m]"
\ বিশেষ ক্রম সংকেত (বিশেষ অক্ষর এড়াতেও ব্যবহার করা যেতে পারে) "\d"
. যেকোন চরিত্র (নতুন লাইন ব্যতীত) "he..o"
^ শুরু হয় "^hello"
$ শেষ "planet$"
* শূন্য বা আরও ঘটনা "he.*o"
+ এক বা একাধিক ঘটনা "he.+o"
? নাল বা একটি ঘটনা "he.?o"
{} সীমিত সংখ্যক ইভেন্ট "he.{2}o"
| বা "falls|stays"
() ধরুন এবং গ্রুপ করুন

বিশেষ সারি

একটি বিশেষ ক্রম হল \ এবং নীচের তালিকার একটি অক্ষর, এবং এর একটি বিশেষ অর্থ রয়েছে:

লেখা ব্যাখ্যা উদাহরণ
\A নির্দিষ্ট অক্ষরগুলি স্ট্রিংয়ের শুরুতে থাকলে একটি মিল প্রদান করে "\AThe"
\b নির্দিষ্ট অক্ষর মেলে যদি সেগুলি একটি শব্দের শুরুতে বা শেষে থাকে r"\bain"
\B কোনো শব্দের শুরুতে (বা শেষে) নির্দিষ্ট অক্ষর উপস্থিত থাকলে একটি মিল দেখায় r"\Bain"
\d যদি স্ট্রিংটিতে সংখ্যা থাকে (0-9 থেকে সংখ্যা) তাহলে একটি ম্যাচ ফেরত দেয়। "\d"
\D স্ট্রিং-এ সংখ্যা না থাকলে একটি মিল ফেরত দেয় "\D"
\s স্ট্রিংটিতে একটি সাদা স্থানের অক্ষর থাকলে একটি মিল প্রদান করে "\s"
\S যদি স্ট্রিংটিতে একটি সাদা স্থানের অক্ষর না থাকে তবে একটি মিল প্রদান করে "\S"
\w স্ট্রিংটিতে কোনো শব্দের অক্ষর থাকলে (a থেকে Z, সংখ্যা 0-9, এবং আন্ডারস্কোর _ অক্ষর) থাকলে একটি মিল দেখায়। "\w"
\W স্ট্রিংটিতে কোনো শব্দের অক্ষর না থাকলে একটি মিল প্রদান করে "\W"
\Z নির্দিষ্ট অক্ষরগুলি স্ট্রিংয়ের শেষে থাকলে একটি মিল দেখায় "Spain\Z"

সেট

একটি সেট হল বর্গাকার বন্ধনীতে আবদ্ধ অক্ষরগুলির একটি সেট [] যার একটি বিশেষ অর্থ রয়েছে:

উদাহরণ

import re

txt = "The rain in Spain"
x = re.findall('[a-c]', txt)
print(x)

এই অভিব্যক্তিটি 'a', 'b', বা 'c' অক্ষর অনুসন্ধান করে।

সেট ব্যাখ্যা
[arn] মেলে যেখানে একটি নির্দিষ্ট অক্ষর (a, r, বা n) ঘটে
[a-n] a এবং n এর মধ্যে বর্ণমালার যেকোনো ছোট হাতের অক্ষরকে মেলে
[^arn] a, r, এবং n ছাড়া যেকোনো অক্ষর মেলে
[0123] একটি মিল দেখায় যেখানে নির্দিষ্ট অঙ্কের যেকোনো একটি (0, 1, 2, বা 3) উপস্থিত থাকে
[0-9] 0 এবং 9 এর মধ্যে যেকোনো অঙ্কের সাথে মেলে
[a-zA-Z] a এবং z, ছোট হাতের বা বড় হাতের বর্ণমালার যেকোনো অক্ষরকে মেলে

ম্যাচিং উপাদান

একটি ম্যাচ অবজেক্ট হল একটি বস্তু যা অনুসন্ধান এবং ফলাফল সম্পর্কে তথ্য ধারণ করে।

মেলানোর উপাদানের বৈশিষ্ট্য এবং পদ্ধতি:

.span()

ম্যাচের শুরু এবং শেষ অবস্থান সমন্বিত একটি টিপল প্রদান করে।

.string

ফাংশনে পাস করা স্ট্রিং ফেরত দেয়।

.group()

মিলে যাওয়া স্ট্রিংয়ের অংশটি দেখায়।

উদাহরণ

import re

txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)

print("Span:", x.span())
print("String:", x.string)
print("Group:", x.group())
আউটপুট:
Span: (12, 17)
String: The rain in Spain
Group: Spain

অনুশীলন করুন

নিম্নলিখিত কোড বিবেচনা করুন:

import re
txt = 'The rain in Spain'
x = re.findall('[a-c]', txt)
print(x)

মুদ্রিত ফলাফল কি হবে?

['a', 'a']
✓ ঠিক আছে! [a-c] অক্ষর 'a', 'b', বা 'c' অনুসন্ধান করে। "স্পেনে বৃষ্টি" স্ট্রিংটিতে 'a' অক্ষরটি দুবার উপস্থিত হয়েছে: "raইন" এবং "এসপিain৷ কোনো 'b' বা 'c' অক্ষর নেই, তাই findall() দুটি 'a' অক্ষরের একটি তালিকা প্রদান করে।
'The rin in Spin'
✗ ভুল! findall() স্ট্রিং প্রতিস্থাপন না করে মিলের একটি তালিকা প্রদান করে। sub() ফাংশন স্ট্রিং প্রতিস্থাপন করে, কিন্তু এখানে findall() ব্যবহার করা হয়েছে।
2
✗ ভুল! findall() একটি তালিকা প্রদান করে, একটি সংখ্যা নয়। len() মিলের সংখ্যা পেতে ব্যবহার করা যেতে পারে: len(re.findall('[a-c]', txt))।