>>> s = '<li>Tamim</li><li>Shakib</li><li>Mahmudullah</li><li>Mominul</li>'

>>> re.findall(r'<li>(.*?)</li>', s)
['Tamim', 'Shakib', 'Mahmudullah', 'Mominul']

>>> re.findall(r'<li>(.*)?</li>', s)
['Tamim</li><li>Shakib</li><li>Mahmudullah</li><li>Mominul']

উদাহারণটি সুবিন ভাইয়ের পাইথন দিয়ে প্রোগ্রামিং শেখা ২য় খন্ড বই থেকে নেওয়া। কোডের রেগুলার এক্সপ্রেশনে ব্যবহৃত '?' চিহ্নটি দিয়ে বোঝায় যে রেগুলার এক্সপ্রেশনটি ননগ্রিডি। '?' চিহ্নটি গ্রুপের (প্রথম বন্ধনীর) মধ্যে এবং বাইরে রাখলে ২ রকমের আউটপুট আসছে। কিন্তু কেন? গ্রুপের মধ্যে আর বাইরে রাখলে রেগুলার এক্সপ্রেশনের অর্থ কিভাবে বদলাচ্ছে? রেগুলার এক্সপ্রেশন দুটো মাতৃভাষায় অনুবাদ করে দিলে নিজে নিজেই বুঝতে পারতাম।

এর সাথে সম্পর্কিত আরেকটি প্রশ্নঃ

>>> re.findall(r'<li>(.*?)</li>', s)
['Tamim', 'Shakib', 'Mahmudullah', 'Mominul']

এখানে রেগুলার এক্সপ্রেশনে একটা গ্রুপ '(.*?)' আছে।automate the boring stuff এ পড়েছিলাম যদি রেগুলার এক্সপ্রেশনে গ্রুপস (groups) থাকে তাহলে findall() মেথড list of tuples of strings রিটার্ন করে। কিন্তু যদি গ্রুপ (group) থাকে তাহলে কি findall() মেথড রেগুলার এক্সপ্রেশনে থাকা অন্য যেসব ক্যারেক্টার ম্যাচ করবে তার মধ্যে থেকে শুধু গ্রুপটি নিয়ে স্ট্রিং এর লিস্ট রিটার্ন করবে?

asked 10 Nov, 07:09

_Shaon_'s gravatar image

_Shaon_
604111

edited 10 Nov, 08:03


(.*?) মানে হচ্ছে ননগ্রিডি (non-greedy)। আর (.*)? -এর (.*) অংশের মানে হচ্ছে যেকোনো ক্যারেক্টার, যতবার খুশি, আর ?-এর মানে হচ্ছে একবার থাকতে পারে আবার নাও থাকতে পারে এবং এটা গ্রিডি।

দ্বিতীয় প্রশ্নটা নিজে এক্সপেরিমেন্ট করে দেখো।

permanent link

answered 10 Nov, 07:41

Tamim%20Shahriar%20Subeen's gravatar image

Tamim Shahriar Subeen ♦♦
5.8k1026

edited 10 Nov, 07:44

1

প্রথম প্রশ্নটা ভালো ছিল, আগামী বছর বইটা আপডেট করার সময় উদাহরণ ও ব্যাখ্যা দিয়ে দিবো। :)

হ্যাঁ! তাহলে অবশ্য নতুনদের বুঝতে সুবিধা হবে। যদি আপডেট করেন তাহলে আরেকটু এডভান্স লেভেলের দিকে গেলে ভাল হয়। বিশেষ করে ওবজেক্ট ওরিয়েন্টেডের ব্যাপারটা।

(10 Nov, 07:50) _Shaon_
1

অবজেক্ট ওরিয়েন্টেডে ওই বইতে যতটুকু আলোচনা করা হয়েছে, বেশিরভাগ সময়েই তার চেয়ে বেশি জানার দরকার পরে না। ৪র্থ বা ৫ম খণ্ড লিখলে সেখানে হয়ত আলোচনা করা হবে।

Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Question tags:

×66
×3

question asked: 10 Nov, 07:09

question was seen: 46 times

last updated: 10 Nov, 08:03