একটি নির্দিষ্ট শব্দের সাথে মেলে আমি কীভাবে একটি রেজেেক্স লিখব?


21

আমি একটি নির্দিষ্ট রেজেক্স কাজ করার চেষ্টা করেছি তবে আমার যা প্রয়োজন তা তা করতে পারি না।

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

rocket
RoCKEt
hi Rocket
This is a rocket.
ROCKET's engine

কিন্তু রকেটে যখন এটির মতো কোনও কিছু পাওয়া যায় তখন ট্রিগার করবেন না

Rocketeer
Sprocket

আমি অনলাইনে একটি রেজেক্স জেনারেটরটি ব্যবহার করে এটি সঠিকভাবে পাওয়ার চেষ্টা করছিলাম তবে আমি ঠিক এটি মেলে না।


1
এটি এমন একটি [বিরল] পরিস্থিতি যেখানে স্ট্যাক ওভারফ্লোয়ের জন্য প্রশ্নটি আরও উপযুক্ত হতে পারে। কোনও ভাষা এবং / অথবা প্ল্যাটফর্ম সরবরাহ করতে ভুলবেন না কারণ প্রতিটি ভাষার নিজস্ব বৈশিষ্ট্য রয়েছে। উদাহরণস্বরূপ, উইন্ডোজ। .নেট এবং রেজেক্স ক্লাস । (সাধারণত, এটি অন্যভাবে। স্ট্যাক ওভারফ্লো সুপার ব্যবহারকারীদের পক্ষে আরও উপযুক্ত develop
jwww

উত্তর:


14

আমি এমএসডিএন নিয়মিত এক্সপ্রেশন কুইক রেফারেন্স বুকমার্ক করার পরামর্শ দিই

আপনি অক্ষরহীন অক্ষর দ্বারা পরিবেষ্টিত "রকেট" শব্দের জন্য একটি সংবেদনশীল ম্যাচ অর্জন করতে চান। একটি রেজেক্স যা কাজ করবে তা হ'ল:

\W*((?i)rocket(?-i))\W*

এটি কী করবে তা হ'ল শূন্য বা আরও বেশি (*) অ-অক্ষরীয় (\ ডাব্লু) অক্ষরের সন্ধান করা, তারপরে রকেটের একটি সংবেদনশীল সংস্করণ ((? I) রকেট (? - i)) পরে শূন্য বা তারও বেশি সংখ্যক ( *) অ-অক্ষরীয় অক্ষর (\ ডাব্লু)। রকেট-ম্যাচিং টার্মের চারপাশে অতিরিক্ত বন্ধনীগুলি ম্যাচটিকে একটি আলাদা গ্রুপে বরাদ্দ করে। রকেট শব্দটি এইভাবে ম্যাচ গ্রুপ 1 এ থাকবে।

আপডেট 1: ম্যাট মন্তব্যটিতে বলেছিল যে এই রেজেক্সটি অজগরটি ব্যবহার করতে হবে। পাইথনের কিছুটা আলাদা সিনট্যাক্স রয়েছে। অজগর একই ফলাফল অর্জন করতে, এই regex ব্যবহার করুন এবং re.IGNORECASEবিকল্প compileবা matchফাংশন পাস ।

\W*(rocket)\W*

Regex101রেগেক্স ইনপুটটির পাশের পাঠ্যবক্সে "i" প্রবেশ করে সিমুলেট করা যায়।

আপডেট 2 ইসমাইল উল্লেখ করেছে, রেজেক্স পুরোপুরি সঠিক নয়, কারণ এটি "1 রকেট 1" এর সাথে মেলে। তিনি একটি আরও ভাল সমাধান পোস্ট করেছেন, যথা

(?:^|\W)rocket(?:$|\W)


1
অনলাইনে রেজেক্স পরীক্ষকগণের সাথে এটি পরীক্ষা করা ( উদাহরণস্বরূপ regex101.com ) এটিকে অবৈধ হিসাবে দেখায় এবং আমি প্রবেশ করানো উদাহরণগুলির সাথে মেলে না। এটি পাইথন স্ক্রিপ্টের অংশ হিসাবে ব্যবহার করার উদ্দেশ্যে। এটি কীভাবে এটি লেখা উচিত তাতে কোনও পার্থক্য রয়েছে?
কেফকা

1
হ্যাঁ এটা করে. আপনি regex101.com এ দেখতে পারেন যে আপনি উপরের বাম দিকে একটি রেজেক্স "স্বাদ" বেছে নিতে পারেন, পাইথনটি কিছুটা আলাদা। আমি আমার উত্তরটি অজগর সমতুল্য দিয়ে আপডেট করব।
Xaser

1
ধন্যবাদ। আমি ভেবেছিলাম রেইজেক্সগুলি মূলত ভাষা স্বাধীন ছিল।
কেফকা

1
তাদের হওয়া উচিত, তবে ছোটখাটো প্রয়োগের পার্থক্য রয়েছে।
Xaser

2
এবং \W*(rocket)\W*ম্যাচ lrocketl। এটি হওয়া উচিত (?:^|\W)(rocket)(?:$|\W)(এটি ছাড়া *এবং আপনাকে এটি পরীক্ষা করে দেখতে হবে যে এটি স্ট্রিংয়ের শুরু এবং / অথবা শেষের সাথে মেলে কিনা)।
ইসমাইল মিগুয়েল 21

10

আমি মনে করি এই ক্ষেত্রে চেহারা-সামনের দিকগুলি ওভারকিল, এবং আপনি ignorecaseবিকল্পটির সাহায্যে শব্দ সীমা ব্যবহার করা ভাল ,

\brocket\b

অন্য কথায়, পাইথনে:

>>> x="rocket's"
>>> y="rocket1."
>>> c=re.compile(r"\brocket\b",re.I)  # with the ignorecase option
>>> c.findall(y)
[]
>>> c.findall(x)
['rocket']

প্রযুক্তিগতভাবে, নন-ক্যাপচারিং গোষ্ঠীগুলি তাত্পর্যপূর্ণ নয়, তবে / বি বিকল্পটি ইসমাইলের সমাধান হিসাবে ঠিক একই ফলাফল দেয় তবে এটি আরও কিছুটা মার্জিত হতে পারে।
Xaser

1

সঙ্গে grepএবং sed, আপনি ব্যবহার করতে পারেন \<rocket\>। এর সাথে grep, -iবিকল্পটি এটিকে কেস-সংবেদনশীল করে তুলবে ( আমি জানি না):

grep -i '\<rocket\>'

সমস্ত sedরেজেক্সস কেস-সংবেদনশীল করার কোনও উপায় আমি জানি না , তবে সর্বদা ক্যাভম্যানের উপায় রয়েছে:

sed -n '/\<[Rr][Oo][Cc][Kk][Ee][Tt]\>/p'

0

পুরো শব্দগুলির জন্য অনুসন্ধান কেবলমাত্র বিকল্পটি ব্যবহার করুন।

যতোক্ষণ বিরামচিহ্ন, আপনি স্বাদ / গন্ধ না জানা পর্যন্ত আপনি এটির উত্তর দিতে পারবেন না।

এটি একটি অতি পুরানো থ্রেড, তাই পরে প্রয়োজনের সাথে দেখা করতে পারে এমন কারও জন্য পোস্ট করা হয়েছে। থ্রেডের উত্স যারা করেছেন তারা হয়তো অন্য কোনও জায়গায় চলে গিয়েছেন ... না?


কি whole words only optionব্যবহার করছেন grepবা php? দুঃখিত, তবে আপনার উত্তরটি অন্যান্য উত্তরের সাথে তুলনায় কোনও অতিরিক্ত মূল্য দেয় না।
টোটো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.