কম্পিউটার

Regex এর সাথে পাইথনে প্যাটার্ন ম্যাচিং


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

বাস্তব জগতে, বেশিরভাগ প্রোগ্রামিং ভাষায় স্ট্রিং পার্সিং রেগুলার এক্সপ্রেশন দ্বারা পরিচালিত হয়। পাইথন প্রোগ্রামিং ল্যাঙ্গুয়েজে রেগুলার এক্সপ্রেশন হল টেক্সট প্যাটার্ন মেলানোর জন্য ব্যবহৃত একটি পদ্ধতি।

"রি" মডিউল যা প্রতিটি পাইথন ইনস্টলেশনের সাথে আসে নিয়মিত এক্সপ্রেশন সমর্থন প্রদান করে।

পাইথনে, একটি রেগুলার এক্সপ্রেশন সার্চ সাধারণত এভাবে লেখা হয়:

match =re.search(pattern, string)

re.search() পদ্ধতি দুটি আর্গুমেন্ট নেয়, একটি রেগুলার এক্সপ্রেশন প্যাটার্ন এবং একটি স্ট্রিং এবং স্ট্রিং এর মধ্যে সেই প্যাটার্নের জন্য অনুসন্ধান করে। যদি স্ট্রিং-এর মধ্যে প্যাটার্নটি পাওয়া যায়, সার্চ() একটি মিল বস্তু ফেরত দেয় বা অন্যথায় কিছুই না। তাই একটি রেগুলার এক্সপ্রেশনে, একটি স্ট্রিং দেওয়া, সেই স্ট্রিংটি একটি প্রদত্ত প্যাটার্নের সাথে মেলে কিনা তা নির্ধারণ করুন এবং, ঐচ্ছিকভাবে, প্রাসঙ্গিক তথ্য ধারণ করে এমন সাবস্ট্রিংগুলি সংগ্রহ করুন। −

এর মত প্রশ্নের উত্তর দিতে একটি রেগুলার এক্সপ্রেশন ব্যবহার করা যেতে পারে
  • এই স্ট্রিংটি কি একটি বৈধ URL?

  • /etc/passwd-এর কোন ব্যবহারকারী একটি প্রদত্ত গ্রুপে আছেন?

  • একটি লগ ফাইলে সমস্ত সতর্কতা বার্তার তারিখ এবং সময় কি?

  • ভিজিটর টাইপ করা URL দ্বারা কোন ব্যবহারকারীর নাম এবং নথির অনুরোধ করা হয়েছিল?

ম্যাচিং প্যাটার্ন

নিয়মিত অভিব্যক্তি জটিল মিনি-ভাষা। তারা অজানা স্ট্রিংগুলিকে মেলানোর জন্য বিশেষ অক্ষরের উপর নির্ভর করে, তবে আসুন আক্ষরিক অক্ষর দিয়ে শুরু করা যাক, যেমন অক্ষর, সংখ্যা এবং স্পেস অক্ষর, যা সবসময় নিজেদের সাথে মেলে। আসুন একটি মৌলিক উদাহরণ দেখি:

রেগুলার এক্সপ্রেশন আমদানির জন্য #search_string ="TutorialsPoint"pattern ="Tutorials" match =re.match(pattern, search_string)#If-statement after search() পরীক্ষায় সফল হলে তা মিলিত হলে:print( "রেজেক্স মেলে:", match.group())else:প্রিন্ট ('প্যাটার্ন পাওয়া যায়নি')

ফলাফল

রেজেক্স মিল:টিউটোরিয়াল

একটি স্ট্রিং মেলানো

পাইথনের "পুনরায়" মডিউলটিতে অনেক পদ্ধতি রয়েছে এবং একটি নির্দিষ্ট রেগুলার এক্সপ্রেশন একটি নির্দিষ্ট স্ট্রিংয়ের সাথে মেলে কিনা তা পরীক্ষা করার জন্য, আপনি re.search() ব্যবহার করতে পারেন। re.MatchObject অতিরিক্ত তথ্য প্রদান করে যেমন স্ট্রিংয়ের কোন অংশে মিল পাওয়া গেছে।

সিনট্যাক্স

matchObject =re.search(pattern, input_string, flags=0)

উদাহরণ

#রেগুলার এক্সপ্রেশন ইমপোর্টের জন্য মডিউল 're' দরকার re# একটি তারিখের স্ট্রিং এর সাথে মেলে একটি রেগুলার এক্সপ্রেশন ব্যবহার করা যাক। , "জানুয়ারি 2"):ম্যাচ =re.search(regex, "Jan 2") # এটি প্রিন্ট করবে [0, 5), যেহেতু এটি # স্ট্রিং প্রিন্টের শুরুতে এবং শেষে মেলে ("সূচক %s এ মিল , %s" % (match.start(), match.end()) # গ্রুপে মিলে যাওয়া মান রয়েছে। বিশেষ করে:# match.group(0) সর্বদা সম্পূর্ণ মিলে যাওয়া স্ট্রিং # match.group(1), match.group(2), ... ইনপুট স্ট্রিং-এ বাম থেকে ডানে ক্রমানুসারে ক্যাপচার # গ্রুপ ফেরত দেবে # match.group() match.group(0) এর সমতুল্য # সুতরাং এটি "জানুয়ারি 2" প্রিন্ট করবে ("সম্পূর্ণ ম্যাচ:%s" % (match.group(0))) # সুতরাং এটি "জানুয়ারি" প্রিন্ট করবে " print("মাস:%s" % (match.group(1))) # সুতরাং এটি "2" প্রিন্ট করবে ("দিন:%s" % (match.group(2))) অন্যথায়:# যদি পুনরায় .search() মেলে না, তারপর কোনোটিই প্রিন্ট ফেরত দেওয়া হয় না("প্যাটার্ন পাওয়া যায়নি!")

ফলাফল

ম্যাচ ইনডেক্স 0, 5 সম্পূর্ণ ম্যাচ:জানুয়ারী 2মাস:জানুয়ারি:2

যেহেতু উপরের পদ্ধতিটি প্রথম ম্যাচের পরে বন্ধ হয়ে যায়, তাই ডেটা এক্সট্র্যাক্ট করার চেয়ে রেগুলার এক্সপ্রেশন পরীক্ষা করার জন্য আরও উপযুক্ত৷

গ্রুপ ক্যাপচার করা

যদি প্যাটার্নে দুই বা ততোধিক বন্ধনী অন্তর্ভুক্ত থাকে, তাহলে বন্ধনী() গ্রুপ মেকানিজম এবং finall() এর সাহায্যে শেষ ফলাফলটি স্ট্রিংয়ের তালিকার পরিবর্তে একটি টিপল হবে। মিলিত প্রতিটি প্যাটার্ন একটি টিপল দ্বারা উপস্থাপিত হয় এবং প্রতিটি টিপলে গ্রুপ(1), গ্রুপ(2).. ডেটা থাকে।

reregex =r'([\w\.-]+)@([\w\.-]+)'str =('hello john@hotmail.com, hello@Tutorialspoint.com, hello python@ gmail.com') matches =re.findall(regex, str)প্রিন্ট(ম্যাচ) মিলের টিপলের জন্য:প্রিন্ট("ব্যবহারকারীর নাম:",টুপল[0]) #ব্যবহারকারীর নাম প্রিন্ট("হোস্ট:",টুপল[1]) #হোস্ট

ফলাফল

[('john', 'hotmail.com'), ('hello', 'Tutorialspoint.com'), ('python', 'gmail.com')]ব্যবহারকারীর নাম:johnHost:hotmail.com ব্যবহারকারীর নাম:helloHost:Tutorialspoint.com ব্যবহারকারীর নাম:pythonHost:gmail.com

স্ট্রিং খোঁজা এবং প্রতিস্থাপন

আরেকটি সাধারণ কাজ হল প্রদত্ত স্ট্রিং-এ প্যাটার্নের সমস্ত উদাহরণ অনুসন্ধান করা এবং তাদের প্রতিস্থাপন করা, re.sub(প্যাটার্ন, প্রতিস্থাপন, স্ট্রিং) ঠিক এটি করবে। উদাহরণস্বরূপ একটি পুরানো ইমেল ডোমেনের সমস্ত উদাহরণ প্রতিস্থাপন করার জন্য

কোড

# requid libraryimport re#given stringstr =('hello john@hotmail.com, hello@Tutorialspoint.com, hello python@gmail.com, Hello World!')#pattern to matchpattern =r'([\w\ .-]+)@([\w\.-]+)'# স্ট্রিং থেকে মিলিত প্যাটার্নটি প্রতিস্থাপন করুন, প্রতিস্থাপন =r'\1@XYZ.com' ## re.sub(pat, replacement, str) - - সমস্ত প্রতিস্থাপন সহ নতুন স্ট্রিং প্রদান করে, ## \1 হল গ্রুপ(1), \2 গ্রুপ(2) প্রতিস্থাপন প্রিন্টে (re.sub(pattern, replace, str))

ফলাফল

হ্যালো john@XYZ.com, hello@XYZ.com, hello python@XYZ.com, হ্যালো ওয়ার্ল্ড!

রি অপশন পতাকা

উপরের মত পাইথন রেগুলার এক্সপ্রেশনে, আমরা প্যাটার্ন ম্যাচের আচরণ পরিবর্তন করতে বিভিন্ন বিকল্প ব্যবহার করতে পারি। এই অতিরিক্ত আর্গুমেন্ট, ঐচ্ছিক পতাকা অনুসন্ধান() বা Findall() ইত্যাদি ফাংশনে যোগ করা হয়, উদাহরণস্বরূপ re.search(pattern, string, re.IGNORECASE)।

  • উপেক্ষা -

    নামটি ইঙ্গিত করে, এটি প্যাটার্ন কেসটিকে সংবেদনশীল করে তোলে (বড়/ছোট হাতের), এটির সাথে, 'a' এবং 'A' উভয়ই মিলে যাওয়া স্ট্রিংগুলি।

  • ডটল

    re.DOTALL ডট(.) মেটাক্যারেক্টারকে নিউলাইন (\n) সহ সমস্ত অক্ষরের সাথে মেলে।

  • মাল্টিলাইন

    re.MULTILINE একটি স্ট্রিংয়ের প্রতিটি লাইনের শুরু(^) এবং শেষ($) মেলাতে দেয়। যাইহোক, সাধারণত, ^ এবং &পুরো স্ট্রিংয়ের শুরু এবং শেষের সাথে মিলবে।


  1. পাইথনে প্যাটার্ন কিভাবে প্রিন্ট করবেন?

  2. পাইথনে Phyllotaxis প্যাটার্ন?

  3. পাইথন রেজেক্সে পুনরাবৃত্তির পরে কীভাবে একটি চরিত্রের সাথে মেলে না?

  4. পাইথনে একাধিক লাইনের উপর প্যাটার্ন কিভাবে মেলে?