শব্দের মধ্যে ফাঁক দেওয়ার জন্য নিয়মিত অভিব্যক্তি


188

আমি একটি নিয়মিত প্রকাশ চাই যা প্রতীকগুলিকে বাধা দেয় এবং কেবল অক্ষর এবং সংখ্যার অনুমতি দেয়। নীচে রেজেক্স দুর্দান্ত কাজ করে, তবে এটি শব্দের মধ্যে ফাঁক দেওয়ার অনুমতি দেয় না।

^[a-zA-Z0-9_]*$

উদাহরণস্বরূপ, এই নিয়মিত প্রকাশটি ব্যবহার করার সময় "হ্যালো ওয়ার্ল্ড" ঠিক আছে, তবে "হ্যালো ওয়ার্ল্ড" মেলে না।

স্থানগুলিকে অনুমতি দেওয়ার জন্য আমি কীভাবে এটি টুইট করতে পারি?

উত্তর:


368

TL; ড

আপনার অক্ষর শ্রেণিতে কেবল একটি স্থান যুক্ত করুন ।

^[a-zA-Z0-9_ ]*$

 


এখন, আপনি যদি কঠোর হতে চান ...

উপরেরটি ঠিক সঠিক নয়। শূন্য বা ততোধিক* অর্থের কারণে , এটি নীচের সমস্ত ক্ষেত্রে মেলে যা সাধারণত একটির সাথে মিলতে বোঝায় না:

  • একটি খালি স্ট্রিং, ""।
  • একটি স্ট্রিং পুরোপুরি ফাঁকা স্থান নিয়ে গঠিত, ""।
  • একটি স্ট্রিং যা নেতৃত্ব দেয় এবং / অথবা স্পেস দিয়ে ট্রেল করে, "হ্যালো ওয়ার্ল্ড"।
  • "হ্যালো ওয়ার্ল্ড" শব্দের মধ্যে একাধিক স্পেস রয়েছে এমন একটি স্ট্রিং।

মূলত আমি ভাবিনি যে এই জাতীয় বিবরণ intoোকানো মূল্যবান, কারণ ওপি এমন একটি প্রাথমিক প্রশ্ন জিজ্ঞাসা করছিল যা দেখে মনে হয় যে কঠোরতা কোনও উদ্বেগ নয়। এখন যদিও প্রশ্নটি কিছু জনপ্রিয়তা পেয়েছে, আমি বলতে চাই ...

... স্টিমার উত্তরটি ব্যবহার করুন ।

যা আমার স্বাদে (ব্যবহার না করে \w) অনুবাদ করে:

^[a-zA-Z0-9_]+( [a-zA-Z0-9_]+)*$

(দয়া করে নির্বিশেষে @ প্লিজটিকে উত্সাহিত করুন))

এই (এবং @ স্টিমার) এর উত্তর সম্পর্কে কিছু বিষয় লক্ষণীয়:

  • যদি আপনি শব্দের মধ্যে একাধিক স্পেসের অনুমতি দিতে চান (বলুন, আপনি যদি দুর্ঘটনাজনিত দ্বৈত-ফাঁকা স্থান অনুমতি দিতে চান বা আপনি যদি পিডিএফ থেকে অনুলিপি-পাঠানো টেক্সট নিয়ে কাজ করছেন) তবে +স্পেসের পরে একটি যুক্ত করুন :

    ^\w+( +\w+)*$
  • আপনি যদি ট্যাব এবং নতুন লাইনের (সাদা স্থানের অক্ষর) অনুমতি দিতে চান তবে স্থানটি একটি দিয়ে প্রতিস্থাপন করুন \s+:

    ^\w+(\s+\w+)*$

    এখানে আমি +ডিফল্টরূপে প্রস্তাব করছি কারণ উদাহরণস্বরূপ, উইন্ডোজ লাইনব্র্যাকস দুটি ক্রমযুক্ত সাদা বর্ণের অক্ষর নিয়ে গঠিত \r\n, সুতরাং আপনার +উভয়কেই ধরতে হবে।

এখনও কাজ করছে না?

আপনি নিয়মিত প্রকাশের কোন উপভাষা ব্যবহার করছেন তা পরীক্ষা করুন। * জাভা র মত ভাষাতে আপনি আপনার ব্যাকস্ল্যাশ, অব্যাহতি করতে হবে অর্থাত \\w এবং \\s। পুরোনো বা একাধিক মৌলিক ভাষা এবং ইউটিলিটিগুলি, মত sed, \wএবং \sসংজ্ঞায়িত না হয়, তাই তাদের চরিত্র ক্লাস, সঙ্গে লিখতে যেমন [a-zA-Z0-9_] এবং [\f\n\p\r\t]যথাক্রমে।

 


* আমি জানি এই প্রশ্নটি ট্যাগ করা, তবে 25,000+ ভিউয়ের উপর ভিত্তি করে, আমি অনুমান করছি যে এটি কেবলমাত্র এই ভাবেন যাঁরা এই প্রশ্নটি দেখছেন। বর্তমানে অনুসন্ধান বাক্যাংশ, নিয়মিত অভিব্যক্তি স্পেস শব্দটির জন্য এটি গুগলে প্রথম হিট ।


3
এটি খালি স্ট্রিংয়ের অনুমতি দেয়
নেহা চৌধারি

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

1
@ পিয়ার - মানব নির্দেশনা গ্রহণ এবং তাদের সুস্পষ্ট নিয়মে রূপান্তর করা মোটামুটি কঠিন। (মানব ভাষা তরল এবং অস্পষ্টতায় পরিপূর্ণ, এবং আমাদের মস্তিস্ক জিনিসগুলি সমাধান করতে এবং শূন্যস্থানগুলি পূরণ করার জন্য প্রয়োজনীয় বেশিরভাগ কাজ করে Comp কম্পিউটারগুলির তেমন মস্তিষ্ক থাকে না, এবং একটিকে অনুকরণ করার চতুর প্রচেষ্টা এখনও যথেষ্ট শক্তিশালী নয়। ) ডিবাগেক্স ডটকমের মতো এমন সরঞ্জাম রয়েছে যা আপনার রেগেক্সকে চাক্ষুষভাবে প্রতিনিধিত্ব করে, তবে এটি যেমন আকর্ষণীয় তবে এটি সম্পূর্ণ নতুনদের জন্য খুব বেশি সহায়ক নাও হতে পারে। আমি তবে বেসিকগুলি নীচে নামানোর জন্য একটি ইন্টারেক্টিভ টিউটোরিয়াল প্রস্তাব করছি।
অ্যান্ড্রু চিউং

1
হ্যাঁ, যদি কেবল স্থান থাকে তবে আপনার রেজেক্সটিও মিলবে। আমার জবাব ছিল নেহা চৌদারের মন্তব্যে।
রাজশেখর রেড্ডি

1
@ পিয়ার তিন বছর পরে - আমি আজ এই প্রশ্নটি জুড়ে এসেছি, আপনার মন্তব্য দেখেছি; আমি নিয়মিত অভিব্যক্তি পরীক্ষার জন্য রেজেক্স নায়ক ( regexhero.net ) ব্যবহার করি। আমি মনে করি অনলাইন সংস্করণটি কেবল সিলভারলাইট সহ ইন্টারনেট এক্সপ্লোরারে কাজ করে তবে এটি কিছুই না থেকে ভাল।
মাইকেল আরমেস

120

একটি সম্ভাবনা কেবল আপনার অক্ষর শ্রেণীর মধ্যে স্থান যুক্ত করা, যেমন অ্যাকিয়ং ৮ suggested প্রস্তাবিত, এটি আপনার প্যাটার্নের উপর আপনি কতটা কঠোর তা নির্ভর করে কারণ এটি 5 টি স্পেস দিয়ে শুরু হওয়া স্ট্রিংকে বা কেবল ফাঁকা স্থানের স্ট্রিংকেও অনুমতি দেয়।

অন্য সম্ভাবনাটি একটি প্যাটার্নটি সংজ্ঞায়িত করা:

আমি \wএটি বেশিরভাগ রেজেেক্স স্বাদে একই ব্যবহার করব [a-zA-Z0-9_]( কিছুতে এটি ইউনিকোড ভিত্তিক)

^\w+( \w+)*$

এটি কমপক্ষে একটি শব্দের একটি ধারাবাহিকের অনুমতি দেবে এবং শব্দগুলি ফাঁক দিয়ে বিভক্ত করা হবে।

^ স্ট্রিংয়ের শুরুটি ম্যাচ করুন

\w+ কমপক্ষে একটি শব্দের চরিত্রের একটি সিরিজ মেলে

( \w+)*একটি গ্রুপ যা 0 বা তার বেশি বার পুনরাবৃত্তি হয়। গ্রুপে এটি কমপক্ষে একটি শব্দের অক্ষরের একটি ধারাবাহিকের পরে একটি স্থান প্রত্যাশা করে

$ স্ট্রিংয়ের শেষের সাথে মেলে


এটি: regex101.com/# জাভাস্ক্রিপ্ট আপনি বিশ্লেষণ করতে চান এমন রেজেক্স প্যাটার্নের পক্ষেও ভাল ব্যাখ্যা সরবরাহ করে।
ডার্ক স্টার 1

ভাল রেগেক্স, অনেক সহজ তারপর অনেকগুলি [0-9a-z] ইত্যাদি
জর্জ


11

সাথে চেষ্টা করুন:

^(\w+ ?)*$

ব্যাখ্যা:

\w             - alias for [a-zA-Z_0-9]
"whitespace"?  - allow whitespace after word, set is as optional

2
এটি তাই ব্যাকট্রাকিং নরকে প্ররোচিত করতে চলেছে।
nhahtdh

1
উদাহরণস্বরূপ, একটি মিলে না যাওয়া স্ট্রিং দেওয়া হয়েছে ggggggggggggggggggggggggggggggggggggg;, আপনার রেজেক্স অতিরিক্ত ব্যাকট্র্যাকিংয়ের কারণে ফলাফলটিতে পৌঁছাতে খুব দীর্ঘ সময় নিতে চলেছে।
nhahtdh

ঠিক আছে, তাই আপনি কি পরামর্শ?
এইচএসজেড

7

আমি ধরে নিচ্ছি আপনি শীর্ষস্থানীয় / পিছনের স্থানটি চান না। এর অর্থ আপনাকে "প্রথম চরিত্র", "মাঝখানে স্টাফ" এবং "শেষ চরিত্র" এ রেকেক্সটি বিভক্ত করতে হবে:

^[a-zA-Z0-9_][a-zA-Z0-9_ ]*[a-zA-Z0-9_]$

বা যদি আপনি পার্লের মতো সিনট্যাক্স ব্যবহার করেন:

^\w[\w ]*\w$

এছাড়াও: আপনি যদি ইচ্ছাকৃতভাবে আপনার রেজেক্সটি উচ্চারণ করেন যে এটি খালি স্ট্রিংকেও অনুমতি দেয় তবে আপনাকে পুরো জিনিসটি optionচ্ছিক করে তুলতে হবে:

^(\w[\w ]*\w)?$

আপনি যদি কেবল একক স্থানের অক্ষরের অনুমতি দিতে চান তবে এটি কিছুটা আলাদা দেখায়:

^((\w+ )*\w+)?$

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


স্থান এবং \sসমতুল্য নয়। \sখালি জায়গার চেয়ে বেশি মেলে।
nhahtdh

@ নাহধঃ মন্তব্য: ধন্যবাদ আমি সাধারণভাবে হোয়াইটস্পেসের সাথে ম্যাচ করার খুব অভ্যস্ত ... উত্তর ঠিক আছে।
ক্রিনিগ

প্রথম অভিব্যক্তিতে আপনি কী বন্ধের প্রথম বন্ধনী অনুভব করছেন) এটি সম্ভব? আমি নিশ্চিত না যে আমি এটি চেষ্টা করেছিলাম না।
সাইনফড

@ এসিনফড: ভাল ক্যাচ প্রকৃতপক্ষে উদ্বোধনী প্রথম বন্ধনী সেই উদাহরণে অতিমাত্রায়। ধন্যবাদ।
ক্রিনিগ

3

এই নিয়মিত প্রকাশ

^\w+(\s\w+)*$

শব্দের মধ্যে কেবল একটি একক স্থানের অনুমতি দেয় এবং কোনও নেতৃস্থানীয় বা পিছনে স্থান নেই।

নীচে নিয়মিত অভিব্যক্তিটির ব্যাখ্যা:

  1. ^ স্ট্রিংয়ের শুরুতে অবস্থান সারণি
  2. \w+ যে কোনও শব্দের চরিত্রের সাথে মেলে [a-zA-Z0-9_]
    1. কোয়ান্টিফায়ার: +এক এবং সীমাহীন সময়ের মধ্যে যতবার সম্ভব সম্ভব, প্রয়োজন অনুসারে ফিরিয়ে দেওয়া [লোভী]
  3. 1 ম ক্যাপচারিং গ্রুপ (\s\w+)*
    1. কোয়ান্টিফায়ার: *শূন্য এবং সীমাহীন সময়ের মধ্যে যতবার সম্ভব সম্ভব, প্রয়োজন অনুসারে ফিরিয়ে দেওয়া [লোভী]
    2. \s যে কোনও সাদা স্থানের অক্ষরটি মেলে [\r\n\t\f ]
    3. \w+ যে কোনও শব্দের চরিত্রের সাথে মেলে [a-zA-Z0-9_]
      1. কোয়ান্টিফায়ার: +এক এবং সীমাহীন সময়ের মধ্যে যতবার সম্ভব সম্ভব, প্রয়োজন অনুসারে ফিরিয়ে দেওয়া [লোভী]
  4. $ স্ট্রিংয়ের শেষে অবস্থান যুক্ত করুন

2

এটি শুরুতে স্থান অনুমতি দেয় না। তবে শব্দের মধ্যে ফাঁক দিয়ে দেয়। শব্দের মধ্যে বিশেষ অক্ষরের জন্যও অনুমতি দেয়। ফার্স্টনাম এবং লাস্টনাম ফিল্ডগুলির জন্য একটি ভাল রেজিেক্স।

\w+.*$

এই উত্তরটি ভুল / ভুল। এই প্যাটার্নটি এক বা একাধিক বর্ণানুক্রমিক, আন্ডারস্কোর, তারপরে শূন্য বা অন্য কোনও নন-লাইন অক্ষরের সাথে মেলে। ওপি'র পক্ষে ভাল নয়।
মিকম্যাকুসা

2

শুধুমাত্র বর্ণমালার জন্য:

^([a-zA-Z])+(\s)+[a-zA-Z]+$

বর্ণানুক্রমিক মান এবং _:

^(\w)+(\s)+\w+$

1
এটি ভাল উদাহরণ নয়, কারণ (কিছু) + (কিছু +) এর মতো নয়। প্রথম উদাহরণ হিসাবে, শুধুমাত্র একক অক্ষর $ 1 হিসাবে ক্যাপচার করা হবে।
Znik

0

এটি ব্যবহার করে দেখুন: (পাইথন সংস্করণ)

"(A-Za-z0-9 ){2, 25}"

আপনার ডেটা সেটের উপর ভিত্তি করে উপরের সীমাটি পরিবর্তন করুন


0

নীচে আপনার রেজেক্স প্যাটার্নের শেষে কেবল একটি স্থান যুক্ত করুন:

[a-zA-Z0-9_ ]

-1

এই অনুমিত উত্তরগুলির বেশিরভাগের দিকে নজর ছিল ...

... এবং স্টপ ওভারফ্লো এবং সেই সাথে একটি রেইজেক্সের জন্য অন্যান্য সাইটগুলি ঝাপটানোর পরে বাপকিস যা কোনও শৈলীর সাথে কোনও শৈলীর সাথে মেলে না এবং শ্বেত-স্থান অনুসরণ করে এবং কঠোরভাবে আলফা অক্ষর শব্দের মধ্যে কেবল একটি একক স্থানের সাথে মেলে ।

^[a-zA-Z]+[(?<=\d\s]([a-zA-Z]+\s)*[a-zA-Z]+$

এভাবে সহজেই অক্ষরে সংখ্যায় পরিবর্তিত হয়:

^[a-zA-Z0-9]+[(?<=\d\s]([a-zA-Z0-9]+\s)*[a-zA-Z0-9]+$

(এটি একক শব্দের সাথে মেলে না তবে কেবল একটি স্যুইচ ব্যবহার করুন / অন্যথায় ^[a-zA-Z0-9]+$যদি আপনার অতিরিক্ত একক শব্দও ধরতে হয় তবে সাধারণ ব্যবহার করুন ))

উপভোগ করুন: ডি


3
[(?<=\d\s]ম্যাচ এক অক্ষর: (, ?, <, =, একটি অঙ্ক, অথবা একটি হোয়াইটস্পেস অক্ষর, এবং যে হতে পারে না কি আপনি বোঝানো। এটি যদি নজরদারি করার কথা ছিল (?<=\d\s)তবে এটি হওয়া উচিত , তবে এটি সেখানে কোনও অর্থ দেয় না; রেজেক্স কখনও মেলে না।
অ্যালান মুর

প্রচারকারীদের কাছে: দয়া করে ভুল সমাধানগুলিকে সমর্থন করবেন না। তারা অন্যান্য ব্যবহারকারীদের বিভ্রান্ত করে এবং তাদের বিশ্বাস করে যে রেজেক্স এমন কিছু করতে পারে যা এটি না করে।
উইক্টর স্ট্রিবিউউ

-1

আমি দেখতে পাচ্ছি যে এটি একটি "ফুলনাম" এর জন্য ভাল কাজ করে:

([a-z',.-]+( [a-z',.-]+)*){1,70}/

-4

চেষ্টা করুন। *? এটা আমার জন্য কাজ করে সাদা জায়গা অনুমতি দেয়


কারণ .সব কিছুর সাথে মেলে। এটি সম্ভবত এখানে সমাধান না হওয়ার সম্ভাবনা রয়েছে।
রুবিক

এটি শূন্য বা কোনও অক্ষরের সাথে মেলে যা এই ক্রমের আগে এবং পরে কী তা নির্ভর করে। এটি যতটা সম্ভব মিলবে। সিঙ্গল ডট যে কোনও একক চরিত্রকে উপস্থাপন করে।
Znik
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.