alt text

search() মেথড যেখানে None দেখাচ্ছে findall() মেথড সেখানে ফাঁকা স্ট্রিং দেখাচ্ছে। মেথড দুটি যে গ্রুপগুলো দেখাচ্ছে তার মধ্যে শুধু '444-5555' এবং '-' এই ২টি গ্রুপ দেখানোর কারণ বুঝেছি। কিন্তু findall() মেথডের ফাঁকা স্ট্রিংওয়ালা গ্রুপগুলো বা search() মেথডের None দেখানোর কারণ বুঝতে পারছি না। কারণটা কি?

একটু ঘাঁটাঘাঁটি করে বুঝলাম, প্যাটার্নের যত সংখ্যক অপশনাল পার্ট অব্যবহৃত থাকে, মানে যেগুলো প্রয়োজন হয় না, তত সংখ্যক ফাঁকা স্ট্রিং বা None দেখায়। যেমনঃ এখানে Area code, প্রথম Separator, Extension এর inner + outer গ্রুপ, এই মোট ৪টি অপশনাল গ্রুপ এখানে অব্যবহৃত ছিলো যার জায়গায় ফাঁকা স্ট্রিং বা None দেখাচ্ছে।

কিন্তু মেথড দুটিতে যদি নিচের স্ট্রিংটা পাস করতাম তাহলে এরকম হতো না।

'415-555-1212 ext 321'

এরকম হওয়ার কারণ কি? আর findall() মেথড যেখানে ফাঁকা স্ট্রিং দেখাচ্ছে, search() মেথড সেখানে None দেখাচ্ছে কেন?

ধন্যবাদ।

asked 01 Nov '17, 13:16

_Shaon_'s gravatar image

_Shaon_
756216

edited 01 Nov '17, 15:04

Mosharraf%20Hosain's gravatar image

Mosharraf Hosain ♦
23618


search() মেথডের ডকুমেন্টেশনে বলা আছে কোনো কিছু ম্যাচ না হলে None রিটার্ন করার কথা। findall() মেথডের জন্য ডকুমেন্টেশনে সুনির্দিষ্ট কিছু পাই নাই। তবে আচরণ দেখে বোঝা যাচ্ছে ম্যাচ পাওয়া না গেলে এটি খালি স্ট্রিং রিটার্ন করছে।

আর রেগুলার এক্সপ্রেশনটা বেশি ভালো হয় নাই আমার মতে। আমি নিচের মতো করে লিখতাম :

>>> preg_new = re.compile(r'(\d{3}|\(\d{3}\))?(\s|-|\.)?(\d{3})(\s|-|\.)(\d{4})(\s*(ext|x|ext.)\s*(\d{2,5}))?')
>>> preg_new.findall(ph)
[('', '', '444', '-', '5555', '', '', '')]
>>> preg_new.search(ph).groups()
(None, None, '444', '-', '5555', None, None, None)
>>>

উল্লেখ্য যে, পাইথন দিয়ে প্রোগ্রামিং শেখা ২য় খণ্ড বইতে রেগুলার এক্সপ্রেশন নিয়ে বিস্তারিত আলোচনা করেছি।

permanent link

answered 02 Nov '17, 08:37

Tamim%20Shahriar%20Subeen's gravatar image

Tamim Shahriar Subeen ♦♦
6.0k1126

আমি automatetheboringstuff.com থেকে শিখতেছি। এইখানে এরকম বলা আছে, জটিলতা এড়াতে আর কোড রিডেবল করার জন্য re.compile() ফাংশনের সেকেন্ড আর্গুমেন্ট হিসাবে re.VERBOSE দিয়ে verbose মোড এনাবল করে ওভাবে কোড লেখার কথা। এজন্যই ঐভাবে লেখার আর কি! কোডাটা ও অবশ্য ঐখান থেকেই নেওয়া।

আর আপনার বইটা আমি অলরেডি কিনে রাখছি [Rokomari.com]। ঐ সাইট থেকে আর ২ টা অধ্যায় রিভাইজ করার আছে। আগামিকাল রাত থেকেই আপনার টা পড়া শুরু করবো আশা করা যায়।

(02 Nov '17, 10:55) _Shaon_
1

verbose মোড ছাড়াও আমার লেখা রেগুলার এক্সপ্রেশনটা একটু অন্যরকম, আরো ভালো করে খেয়াল করলে বুঝতে পারা যাবে।

(02 Nov '17, 10:59) Tamim Shahriar Subeen ♦♦

প্রোগ্রামিং শেখার শুরুটা আপনার বের করা ডিভিডি ডিস্ক 'প্রোগ্রামিংয়ে হাতে খড়ি' দিয়েই হইছিলো। শুরু থেকেই আপনার দেখানো নিয়ম ফলো করে আসতেছি। আপনার এই বইটা পড়ার পর ও ব্যাতিক্রম হবে না।

অনেক অনেক ধন্যবাদ ভাই :)

(02 Nov '17, 12:11) _Shaon_
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:

×92
×4

question asked: 01 Nov '17, 13:16

question was seen: 207 times

last updated: 02 Nov '17, 12:11