ধরুন আমার একটা স্ট্রিং আছে ‌‌‌‌bstr = "তোমাকে ধন্যবাদ"। আমি দেখছে চাচ্ছি "ধন্যবাদ" শব্দটা bstr-তে আছে কি নেই। এই কাজটি কীভাবে করতে পারি? আমি জানি একটা লিনিয়ার সার্চ ব্যবহার করে এটা করা যায়, কিন্তু রেগুলার এক্সপ্রেশন ব্যবহার করে করলে সম্ভবত দুই-তিন লাইন কোড লিখেই কাজটা করে ফেলা যায়। নিচের সমাধান ইংরেজি বাক্যের ক্ষেত্রে ঠিক আছে, কিন্তু আমি বাংলা নিয়ে কাজ করছিলাম, এই ক্ষেত্রে সমাধানটি কি হতে পারে?

import re
def findWholeWord(w):
    return re.compile(r'\b({0})\b'.format(w)).search

s = "bangladesh ekti sundor desh"
s2 = "dhonnobadtumake python"

if findWholeWord("ekti sundor")(s):
    print "ekti sundor string a ache"
else:
    print "ekti sundor string a nei"

if findWholeWord("dhonnobad")(s2):
    print "dhonnobad string a ache"
else:
    print "dhonnobad string a nei"

আউটপুট

ekti sundor string a ache
dhonnobad string a nei

আমি পাইথন ২.৭ ব্যবহার করছি।

asked 28 Apr, 14:32

imTroy's gravatar image

imTroy
17312

edited 29 Apr, 08:17

if "ধন্যবাদ" in bstr:
    # do ...
(28 Apr, 16:21) menon

যদি bstr = "তোমাকেধন্যবাদ মেনন" এইরকমও হয়, এই কন্ডিশন সত্য হবে। এই উত্তরটা দেখতে পারেন - https://stackoverflow.com/a/5320179/8975847

(28 Apr, 16:31) imTroy

import re
bstr = "তোমাকে ধন্যবাদ"
if re.search('ধন্যবাদ', bstr):
    print("found")
permanent link

answered 07 May, 03:09

alamarif's gravatar image

alamarif
111

-1

মেনন ভাই আর আপনার কমেন্ট পড়লাম। আপনার চাওয়াটা বুঝলেও কথা বুঝি নাই। আপনার কন্ডিশন কি ২টা?

১) পুরো স্ট্রিং হতে হবে "ধন্যবাদ তোমাকে"।

২) এই স্ট্রিং এর মধ্যে "ধন্যবাদ" আছে কিনা দেখতে হবে।

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

bstr = "ধন্যবাদ তোমাকে"
if bstr == "ধন্যবাদ তোমাকে":
    # do...

নাকি স্ট্রিং-এ "ধন্যবাদ" শব্দটাই আলাদা থাকতে হবে, এর সাথে কোন শব্দ মিশে থাকলে চলবে না?

যদি এমন চান,

bstr = "ধন্যবাদ তোমাকে"
if bstr.startswith("ধন্যবাদ") or " ধন্যবাদ" in bstr:
    # do...

যদি "ধন্যবাদ" শব্দটা স্ট্রিং-এর প্রথমে থাকে তাহলে তো আর শুরুতে স্পেস থাকবে না। শুরুতেই "ধন্যবাদ" আছে কি-না চেক করার জন্য স্ট্রিং-এর startswith() মেথড (ফাংশন) ব্যবহার করলাম।

আর যদি "ধন্যবাদ" স্ট্রিং শুরুতে না থাকে, স্ট্রিং-এর মাঝে থাকে তাহলে আপনার চাওয়া মতে অবশ্যই "ধন্যবাদ" এর আগে স্পেস থাকতে হবে। এজন্য or দিয়ে

" ধন্যবাদ" in bstr

কন্ডিশন যোগ করে দিলাম।

আবার আপনি যদি চান যে "ধন্যবাদ" এর আগে স্পেস না থাকলেও চলবে, মানে শব্দের সাথে মিশে থাকলেও চলবে তাহলে ‌if স্টেটমেন্টে or দিয়ে নিচের কন্ডিশন যোগ করে দেন।

"ধন্যবাদ" in bstr

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

permanent link

answered 29 Apr, 06:16

_Shaon_'s gravatar image

_Shaon_
756216

edited 29 Apr, 08:04

Mosharraf%20Hosain's gravatar image

Mosharraf Hosain ♦
23618

আমি চাচ্ছি একটা স্ট্রিং অন্য আরেকটি স্ট্রিং এ আলাদাভাবে আছে কি নেই তা দেখতে। অবশ্যই এর সাথে কোন শব্দ মিশে থাকলে চলবে না। আপনি যে কন্ডিশন ব্যবহার করেছেন,

if bstr.startswith("ধন্যবাদ") or " ধন্যবাদ" in bstr:

এখন স্ট্রিং যদি এই রকম হয় bstr = "ধন্যবাদতোমাকে পাইথন" বা bstr = "পাইথন ধন্যবাদতোমাকে" এবং আমি যদি "ধন্যবাদ" স্ট্রিং টা bstr এ আছে কি নেই দেখতে চাই আপনার কন্ডিশন কিন্তু সত্য হবে। যা আমি চাচ্ছি না।

(29 Apr, 07:05) imTroy

আবার bstr = "বাংলাদেশ একটি সুন্দর দেশ" যদি এইরকম হয় এবং আমি দেখতে চাই "একটি সুন্দর" এই স্ট্রিং টি bstr এ আছে কি নেই দেখতে, এই ক্ষেত্রে সর্ত সত্য হতে হবে। আবার bstr = "বাংলাদেশ একটি সুন্দরদেশ" যদি এইরকম হয় এবং আমি দেখতে চাই "একটি সুন্দর" এই স্ট্রিং টি bstr এ আছে কি নেই দেখতে,এই ক্ষেত্রে সর্ত মিথ্যা হতে হবে।

(29 Apr, 07:43) imTroy

first_index = string এ "ধন্যবাদ" এর শুরুর index

last_index = string এ "ধন্যবাদ" এর শেষ index

if (first_index == 0 or string[first_index - 1] == 'space') and (last_index + 1 == len(string) or string[last_index + 1] == 'space'):

# do..

স্ট্রিং এ "ধন্যবাদ" যেভাবেই থাকুক যদি আলাদা ভাবে থাকে তাহলে ম্যাচ করবে, না হয় করবে না।

কোডঃ https://paste.ubuntu.com/p/QVwbS5QHgj/

আমি রেগুলার এক্সপ্রেশন ব্যাবহার করে কোড দিচ্ছি না এজন্য কারণ ঐটা দেওয়া না দেওয়া একি কথা হবে। আরে ঐভাবে কোড দেওয়াও সম্ভবত উচিৎ হবে না।

যাই হোক, রেগুলার এক্সপ্রেশন ছাড়াও এসব সমস্যা অল্প লাইনের কোডেও সমাধান করা যায়।

(29 Apr, 11:05) _Shaon_

রেগুলার এক্সপ্রেশন শিখতে চাইলে এন্সারে যে লিঙ্ক দিছি ঐটা দেখতে পারেন।

(29 Apr, 11:05) _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:

×1
×1

question asked: 28 Apr, 14:32

question was seen: 96 times

last updated: 07 May, 03:09

Related questions