পাইথন 3 এর জন্য Re মডিউলের জন্য ডকুমেন্টেশন। রেগুলার এক্সপ্রেশনের জন্য রি মডিউল

রেগুলার এক্সপ্রেশন প্রায় যেকোনো প্রোগ্রামিং ভাষার একটি খুব জনপ্রিয় উপাদান। তারা আপনাকে আপনার প্রয়োজনীয় তথ্য দ্রুত অ্যাক্সেস করতে সাহায্য করে। বিশেষত, যখন পাঠ্য প্রক্রিয়া করার প্রয়োজন হয় তখন এগুলি ব্যবহার করা হয়। পাইথন ডিফল্টরূপে একটি বিশেষ মডিউল নিয়ে আসে। re, যা রেগুলার এক্সপ্রেশনের সাথে কাজ করার জন্য দায়ী।

আজ আমরা এটি সাধারণভাবে কী, কীভাবে তাদের সাথে কাজ করতে হয় এবং কীভাবে মডিউলটি সে সম্পর্কে বিস্তারিতভাবে কথা বলব re সাহায্য করবে.

নিয়মিত অভিব্যক্তি: একটি ভূমিকা

রেগুলার এক্সপ্রেশনের ব্যবহার কি? প্রায় সব. উদাহরণস্বরূপ, এইগুলি:

  1. টেক্সট বৈধতা প্রয়োজন যে ওয়েব অ্যাপ্লিকেশন. একটি সাধারণ উদাহরণ হল অনলাইন মেইল ​​ক্লায়েন্ট।
  2. টেক্সট, ডাটাবেস এবং তাই সম্পর্কিত অন্য কোন প্রকল্প।

আমরা সিনট্যাক্স পার্সিং শুরু করার আগে, আমাদের লাইব্রেরির কার্যকারিতার মূল নীতিগুলি আরও বিশদভাবে বোঝা উচিত re এবং সাধারণভাবে, এটি সম্পর্কে সাধারণত ভাল কি। আমরা বাস্তব অনুশীলন থেকে উদাহরণও দেব, যেখানে আমরা তাদের ব্যবহারের পদ্ধতি বর্ণনা করব। আপনি এমন একটি টেমপ্লেট তৈরি করতে পারেন, যা আপনার জন্য পাঠ্য সহ বিভিন্ন ধরণের ক্রিয়াকলাপ সম্পাদনের জন্য উপযুক্ত।

Re লাইব্রেরিতে একটি টেমপ্লেট কি?

এটির সাহায্যে, আপনি অন্যান্য ফাংশনগুলিকে আরও অভিযোজিত করার জন্য বিভিন্ন ধরণের তথ্য অনুসন্ধান করতে পারেন, তাদের সাথে সম্পর্কিত তথ্য পেতে পারেন। এবং, অবশ্যই, এই তথ্য প্রক্রিয়া করতে.

উদাহরণস্বরূপ, নিম্নলিখিত টেমপ্লেট নিন: s+. এর অর্থ যেকোন স্থানের অক্ষর। আপনি যদি এটিতে একটি প্লাস চিহ্ন যুক্ত করেন তবে এর অর্থ হল প্যাটার্নটিতে একাধিক স্থান অন্তর্ভুক্ত রয়েছে। এটি এমনকি ট্যাব অক্ষরগুলির সাথেও মিলতে পারে যাকে বলা হয় t+.

এগুলি ব্যবহার করার আগে, আপনাকে লাইব্রেরি আমদানি করতে হবে Re. এর পরে, আমরা টেমপ্লেট কম্পাইল করার জন্য একটি বিশেষ কমান্ড ব্যবহার করি। এটি দুটি ধাপে করা হয়।

>>> আবার আমদানি করুন

>>> regex = re.compile('s+')

বিশেষ করে, এই কোডটি ব্যবহার করা যেতে পারে এমন একটি টেমপ্লেট কম্পাইল করার কাজ করে। উদাহরণস্বরূপ, স্পেস অনুসন্ধান করতে (এক বা একাধিক)।

রেগুলার এক্সপ্রেশন ব্যবহার করে বিভিন্ন স্ট্রিং থেকে আলাদা তথ্য পাওয়া

ধরুন আমাদের একটি ভেরিয়েবল আছে যার মধ্যে নিম্নলিখিত তথ্য রয়েছে।

>>> টেক্সট = “””100 INF ইনফরমেটিক্স

213 MAT গণিত  

156 ENG ইংরেজি»»»

এতে তিনটি প্রশিক্ষণ কোর্স রয়েছে। তাদের প্রতিটি তিনটি অংশ নিয়ে গঠিত - নম্বর, কোড এবং নাম। আমরা দেখতে পাই যে এই শব্দগুলির মধ্যে ব্যবধান ভিন্ন। এই লাইনটিকে আলাদা সংখ্যা এবং শব্দে ভাঙ্গার জন্য কী করতে হবে? এই লক্ষ্য অর্জনের জন্য দুটি পদ্ধতি রয়েছে:

  1. একটি ফাংশন কল করুন re.split.
  2. ফাংশন প্রয়োগ করুন বিভক্ত করা উন্নত regex.

এখানে আমাদের ভেরিয়েবলের জন্য প্রতিটি পদ্ধতির সিনট্যাক্স ব্যবহার করার একটি উদাহরণ রয়েছে।

>>> re.split('s+', টেক্সট)  

# অথবা

>>> regex.split(টেক্সট)

আউটপুট: ['100', 'INF', 'কম্পিউটার সায়েন্স', '213', 'MAT', 'Math', '156', 'ENG', 'English']

সাধারণভাবে, উভয় পদ্ধতি ব্যবহার করা যেতে পারে। কিন্তু ফাংশনটি একাধিকবার ব্যবহার করার পরিবর্তে একটি রেগুলার এক্সপ্রেশন ব্যবহার করা আসলে অনেক সহজ। re.split.

তিনটি ফাংশনের সাথে মিল খুঁজে পাওয়া

ধরা যাক আমাদের একটি স্ট্রিং থেকে শুধুমাত্র সংখ্যা বের করতে হবে। এর জন্য কী করা দরকার?

re.findall()

এখানে ফাংশন জন্য একটি ব্যবহার কেস আছে findall(), যা রেগুলার এক্সপ্রেশনের সাথে আপনাকে একটি টেক্সট ভেরিয়েবল থেকে এক বা একাধিক সংখ্যার ঘটনা বের করতে দেয়।

>>> মুদ্রণ (পাঠ্য)  

100 INF ইনফরমেটিক্স

213 MAT গণিত  

156 ENG ইংরেজি

>>> regex_num = re.compile('d+')  

>>> regex_num.findall(টেক্সট)  

['100', '213', '156']

d চিহ্নের সাথে একসাথে, আমরা একটি টেমপ্লেট ব্যবহার করেছি যা একটি পরিবর্তনশীল বা পাঠ্যের মধ্যে অবস্থিত একেবারে যেকোনো সংখ্যাসূচক মান নির্দেশ করে। এবং যেহেতু আমরা সেখানে একটি + যোগ করেছি, এর মানে হল অন্তত একটি সংখ্যা উপস্থিত থাকতে হবে। 

আপনি * চিহ্নটি নির্দিষ্ট করতে ব্যবহার করতে পারেন যে একটি মিল খুঁজে পাওয়ার জন্য একটি সংখ্যার উপস্থিতি প্রয়োজন হয় না।

কিন্তু আমাদের ক্ষেত্রে, যেহেতু আমরা + ব্যবহার করেছি, আমরা এর সাথে এক্সট্রাক্ট করেছি findall() পাঠ্য থেকে কোর্সের 1 বা তার বেশি ডিজিটাল উপাধি। সুতরাং, আমাদের ক্ষেত্রে, রেগুলার এক্সপ্রেশনগুলি ফাংশনের সেটিংস হিসাবে কাজ করে।

re.search() বনাম re.match()

আপনি ফাংশনগুলির নাম থেকে অনুমান করতে পারেন, প্রথমটি পাঠ্যের মধ্যে একটি মিলের জন্য অনুসন্ধান করে। প্রশ্ন: মধ্যে পার্থক্য কি Findall? বিন্দু হল যে এটি একটি নির্দিষ্ট বস্তু প্রদান করে যা প্যাটার্নের সাথে মেলে, এবং পূর্ববর্তী ফাংশনের মতো একটি তালিকা আকারে পাওয়া ফলাফলের সম্পূর্ণ ক্রম নয়।

পরিবর্তে, re.match ফাংশন একই কাজ করে। শুধু সিনট্যাক্স ভিন্ন। টেমপ্লেটটি শুরুতে স্থাপন করতে হবে। 

আসুন একটি উদাহরণ নেওয়া যাক যা এটি প্রদর্শন করে।

>>> # টেক্সট দিয়ে একটি ভেরিয়েবল তৈরি করুন

>>> text2 = «»»INF ইনফরমেটিক্স

213 MAT গণিত 156″»»  

>>> # রেজেক্স কম্পাইল করুন এবং নিদর্শনগুলি সন্ধান করুন

>>> regex_num = re.compile('d+')  

>>> s = regex_num.search(text2)  

>>> প্রিন্ট ('প্রথম সূচক:', s.start())  

>>> প্রিন্ট ('শেষ সূচক:', s.end())  

>>> প্রিন্ট(টেক্সট2[s.start():s.end()]) 

প্রথম সূচক: 17 

শেষ সূচক: 20

213

আপনি যদি একটি ভিন্ন উপায়ে একটি অনুরূপ ফলাফল পেতে চান, আপনি ফাংশন ব্যবহার করতে পারেন গ্রুপ().

রে লাইব্রেরির সাথে পাঠ্যের অংশ প্রতিস্থাপন করা হচ্ছে

পাঠ্য প্রতিস্থাপন করতে, ফাংশনটি ব্যবহার করুন re.sub()। ধরুন আমাদের কোর্সের তালিকা একটু পরিবর্তন হয়েছে। আমরা দেখতে পাই যে প্রতিটি ডিজিটাল মানের পরে আমাদের একটি ট্যাব আছে। আমাদের কাজ হল এই সমস্ত ক্রমকে এক লাইনে একত্রিত করা। এটি করার জন্য, আমাদের s+ এক্সপ্রেশনটি প্রতিস্থাপন করতে হবে অতিক্রম করতে 

মূল লেখাটি ছিল:

# পাঠ্য সহ একটি ভেরিয়েবল তৈরি করুন

>>> টেক্সট = “””100 INF t ইনফরমেটিক্স

213 MAT t গণিত  

156 ENG t ইংরেজি»»»  

>>> মুদ্রণ (পাঠ্য)  

100 তথ্য ইনফরমেটিক্স

213 MAT অংক  

156 ENG ইংরেজি

পছন্দসই অপারেশন সম্পাদন করতে, আমরা কোডের নিম্নলিখিত লাইনগুলি ব্যবহার করেছি।

# এক বা একাধিক স্পেস 1 দিয়ে প্রতিস্থাপন করুন

>>> regex = re.compile('s+')  

>>> প্রিন্ট(regex.sub(' ', টেক্সট))  

ফলস্বরূপ, আমরা একটি লাইন আছে. 

101 COM কম্পিউটার 205 MAT গণিত 189 ENG ইংরেজি

এখন আরেকটি সমস্যা বিবেচনা করুন। আমরা স্পেস নির্বাণ কাজ সঙ্গে সম্মুখীন হয় না. এটি আমাদের জন্য অনেক বেশি গুরুত্বপূর্ণ যে সমস্ত কোর্সের নাম একটি নতুন লাইনে শুরু হয়। এটি করার জন্য, অন্য এক্সপ্রেশন ব্যবহার করা হয় যা ব্যতিক্রমটিতে একটি নতুন লাইন যোগ করে। এটা কি ধরনের অভিব্যক্তি?

লাইব্রেরি Re নেতিবাচক মিলের মতো একটি বৈশিষ্ট্য সমর্থন করে। এটি সরাসরি একটি থেকে পৃথক যে এটিতে স্ল্যাশের আগে একটি বিস্ময়বোধক বিন্দু রয়েছে। অর্থাৎ, যদি আমাদের নতুন লাইনের অক্ষরটি এড়িয়ে যাওয়ার প্রয়োজন হয়, তবে আমাদের n এর পরিবর্তে !n লিখতে হবে।

আমরা নিম্নলিখিত কোড পেতে.

# নতুন লাইন ব্যতীত সমস্ত স্থান সরান  

>>> regex = re.compile('((?!n)s+)')  

>>> প্রিন্ট(regex.sub(' ', টেক্সট))  

100 INF ইনফরমেটিক্স

213 MAT গণিত  

156 ENG ইংরেজি

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

রেগুলার এক্সপ্রেশনের গোষ্ঠীর সাহায্যে আমরা কাঙ্খিত বস্তুগুলোকে আলাদা উপাদানের আকারে পেতে পারি, এক লাইনে নয়। 

ধরুন আমাদের কোর্স নম্বর, কোড এবং নাম এক লাইনে নয়, আলাদা উপাদান হিসাবে পেতে হবে। কাজটি সম্পূর্ণ করার জন্য, আপনাকে কোডের বিপুল সংখ্যক অপ্রয়োজনীয় লাইন লিখতে হবে। 

আসলে, কাজটি ব্যাপকভাবে সরলীকৃত করা যেতে পারে। আপনি সমস্ত এন্ট্রির জন্য টেমপ্লেট কম্পাইল করতে পারেন এবং বন্ধনী থেকে আপনার যে ডেটা পেতে হবে তা নির্দিষ্ট করতে পারেন।

খুব কম সংখ্যক লাইন থাকবে। 

# কোর্স টেক্সট টেমপ্লেটের গ্রুপ তৈরি করুন এবং সেগুলি বের করুন

>>> course_pattern = '([0-9]+)s*([A-ZY]{3})s*([a-zA-ZoY]{4,})'  

>>> re.findall(course_pattern, text)  

[('100', 'INF', 'কম্পিউটার সায়েন্স'), ('213', 'MAT', 'Math'), ('156', 'ENG', 'English')]

"লোভী" মিলের ধারণা

মান অনুসারে, রেগুলার এক্সপ্রেশনগুলি সর্বাধিক পরিমাণে মিলে যাওয়া ডেটা বের করার জন্য প্রোগ্রাম করা হয়। এবং এমনকি যদি আপনার অনেক কম প্রয়োজন হয়।

আসুন একটি নমুনা HTML কোড দেখি যেখানে আমাদের ট্যাগ পেতে হবে।

>>> পাঠ্য = "লোভী রেগুলার এক্সপ্রেশন ম্যাচিং এর উদাহরণ"  

>>> re.findall('', পাঠ্য)  

['লোভী রেগুলার এক্সপ্রেশন ম্যাচিং এর উদাহরণ']

শুধুমাত্র একটি ট্যাগ বের করার পরিবর্তে, পাইথন পুরো স্ট্রিং পেয়েছে। তাই একে লোভী বলা হয়।

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

আপনি নিম্নলিখিত কোড এবং দোভাষীর আউটপুট পাবেন।

>>> re.findall('', পাঠ্য)  

[”, ”]

যদি এটি শুধুমাত্র প্রথম সম্মুখীন ঘটনা পেতে প্রয়োজন হয়, তারপর পদ্ধতি ব্যবহার করা হয় অনুসন্ধান ().

re.search('', text).group()  

"

তাহলেই ওপেনিং ট্যাগ পাওয়া যাবে।

জনপ্রিয় অভিব্যক্তি টেমপ্লেট

এখানে সবচেয়ে বেশি ব্যবহৃত রেগুলার এক্সপ্রেশন প্যাটার্ন ধারণকারী একটি টেবিল রয়েছে।

পাইথন 3 এর জন্য Re মডিউলের জন্য ডকুমেন্টেশন। রেগুলার এক্সপ্রেশনের জন্য রি মডিউল

উপসংহার

আমরা নিয়মিত এক্সপ্রেশনের সাথে কাজ করার জন্য শুধুমাত্র সবচেয়ে মৌলিক পদ্ধতি বিবেচনা করেছি। যাই হোক না কেন, আপনি দেখেছেন যে তারা কতটা গুরুত্বপূর্ণ। এবং এখানে এটি কোনও পার্থক্য করে না যে পুরো পাঠ্য বা এর পৃথক অংশগুলিকে পার্স করা প্রয়োজন, এটি একটি সামাজিক নেটওয়ার্কে একটি পোস্ট বিশ্লেষণ করা বা পরে এটি প্রক্রিয়া করার জন্য ডেটা সংগ্রহ করা প্রয়োজন কিনা। নিয়মিত অভিব্যক্তি এই ক্ষেত্রে একটি নির্ভরযোগ্য সহায়ক।

তারা আপনাকে কাজগুলি সম্পাদন করার অনুমতি দেয় যেমন:

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

নিয়মিত অভিব্যক্তিগুলি আপনাকে অ-তুচ্ছ ক্রিয়াকলাপগুলি সম্পাদন করার অনুমতি দেয়। প্রথম নজরে, এই বিজ্ঞান আয়ত্ত করা সহজ নয়। তবে অনুশীলনে, সবকিছুই প্রমিত, তাই এটি একবার খুঁজে বের করা যথেষ্ট, তারপরে এই সরঞ্জামটি কেবল পাইথনেই নয়, অন্য কোনও প্রোগ্রামিং ভাষায়ও ব্যবহার করা যেতে পারে। এমনকি এক্সেল ডেটা প্রসেসিং স্বয়ংক্রিয় করতে নিয়মিত এক্সপ্রেশন ব্যবহার করে। তাই এই টুল ব্যবহার না করা পাপ।

নির্দেশিকা সমন্ধে মতামত দিন