সি # তে রেগেক্স ব্যবহার করে কোনও নির্দিষ্ট শব্দের আগে অঙ্কগুলি কীভাবে পাবেন?


10

আমরা শব্দের আগে অঙ্কগুলি পেতে রেগেক্সের নীচে ব্যবহার করব।

উদাহরণ:

838123 কেউ ওয়ার্ড 8 কেউ ওয়ার্ড 12 কেউ ওয়ার্ড

(\d+)\s*someWord

তবে কখনও কখনও সংখ্যা এবং শব্দের মধ্যে কিছু আসে lease দয়া করে নীচের উদাহরণ লাইনটি দেখুন।

উদা:

কিছু শব্দ 123 এর 43434 কিছু কিছু 2323 নতুন কিছু শব্দ

কীভাবে রেজেক্স ব্যবহার করে সেই শব্দের আগে সঠিক সংখ্যা পাবেন?

আমাকে আপনার পরামর্শ দিন।


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

1
আপনি কী জিজ্ঞাসা করছেন তা পরিষ্কার নয় ...
JohnyL

উত্তর:


14

এটা কর:

(\d+)[^\d]+some[wW]ord

আপনার নিজের সংখ্যা ছাড়া অন্য কিছু গ্রহণ করা দরকার accept আমি উভয় বিবেচনা করেছি wএবং Wযেহেতু আপনার উদাহরণগুলিতে উভয়ই রয়েছে।

ডেমো


আপনি কি আলাদা উত্তর খুঁজছেন?
রেজা আঘইই

@ রেজাআগাই হয়ত হতে পারে
সিনকাউট

আপনি যে বর্তমান উত্তরটি দিয়েছিলেন তাতে সমস্যাগুলি কী? আপনি কোন উন্নতি খুঁজছেন?
রেজা আঘইই

@ রেজাআঘাই এই সত্য যে ওপি কোনও উত্তর গ্রহণ করেনি এখনও আমাকে ভাবতে বাধ্য করে যে আমি কোনও কোণার মামলা বা কিছু মিস করেছি কিনা। এটি সমাধানের বিকল্প পদ্ধতিরও স্বাগত।
সিনকাউট

1
@ সিনকাউট-রিইনস্টেটমোনিকা দয়া করে কোনও সম্ভাব্য মিস প্রান্তের মামলার জন্য আমার উত্তরটি দেখুন (নিশ্চিত না যে এটি অপের সাথে সম্পর্কিত কিনা) if
স্টিভ চেম্বারস

4

অনুমান করে যে "কোনও কিছুতে" অঙ্কগুলি অন্তর্ভুক্ত নয়, আপনি এই রেজেক্সটি ব্যবহার করতে পারেন:

(\d+)[^\d]+someWord

Regex101 এ ডেমো


3

সিনকাউটের উত্তর থেকে একটি সম্ভাব্য "মিস কর্নার কেস" হ'ল যদি ম্যাচটি someWordঅবশ্যই সঠিক হওয়া উচিত , উদাহরণস্বরূপ notsomeWordএবং someWordNotThisযদি না মিলে যায়।

নিয়মিত অভিব্যক্তিতে নিম্নলিখিত এক্সটেনশনটি এটিকে সম্বোধনের একটি উপায় সরবরাহ করে:

(\d+)[^\d]*[^\w]some[wW]ord[^\w]

ব্যাখ্যা:[^\w] আগে বা জন্য মিলকারীর পরsomeWord একটি জন্য বর্ণন "অ-শব্দ চরিত্র" আগে ও পরে - লাইনের শেষ এখানে গণনা করে। এটি অবশ্যই আরও জটিল / নির্দিষ্ট করা যেতে পারে, সঠিক প্রয়োজনীয়তার উপর নির্ভর করে।

ডেমো


3

আপনি এরকম কিছু চেষ্টা করতে পারেন:

(\d+)\s?([^\d]*)

(\d+)    - get the digits
\s?      - discard a possible space
([^\d]*) - get all chars that are not digits

আপনি এখানে পরীক্ষা দেখতে পারেন


3

প্রথমে পৃথক করুন some[wW]ord, numberএবং spaceএকটি প্যাটার্ন দিয়ে, তারপর এটিতে দ্বিতীয় প্যাটার্নটি চালান

 var pattern = @"\b(some[wW]ord|[\d]|\s)*\b";
 var rgx = new Regex(pattern);
 var sentence = "43434 of someword 12 anything someword 2323 new someword";
 var result = string.Empty;
 foreach (Match match in rgx.Matches(sentence)){
     result += match.Value;
}
//output => result: 43434 someword 12 someword 2323 someword

 var patternOnCorrectSentence = @"\b(\d+)\s*some[wW]ord*\b";
 var rgxOnCorrectSentence = new Regex(patternOnCorrectSentence);

 var resultOnCorrectSentence = new List<string>();
 foreach (Match match in rgxOnCorrectSentence.Matches(result)){
     resultOnCorrectSentence.Add(match.Value);
 }
 resultOnCorrectSentence.ForEach(Console.WriteLine);

 Console.ReadKey();

প্রথম প্যাটার্নটি কার্যকর করা হলে বাক্যটি পছন্দসইভাবে হবে

কিছু শব্দ 123 এর 43434 কিছু কিছু 2323 নতুন কিছু শব্দ

পরিবর্তন:

43434 কিছু শব্দ 12 কিছু শব্দ 2323 কিছু শব্দ


2

তবে কখনও কখনও সংখ্যা এবং শব্দের মধ্যে কিছু আসে lease দয়া করে নীচের উদাহরণ লাইনটি দেখুন।

উদা:

কিছু শব্দ 123 এর 43434 কিছু কিছু 2323 নতুন কিছু শব্দ

এটা চেষ্টা কর

(\ D +) (। *?) Someword

ব্যাখ্যা

\ d + - সংখ্যাগুলি

। *? - সংখ্যার পরে কিছু না হলেও সর্বনিম্ন উপস্থিতি।

কিছু শব্দ - কিছুটা সঠিক মিল

ডেমো


2

ব্যবহার \s*করা কেবলমাত্র 0 বা ততোধিক সাদা বর্ণের অক্ষরের সাথে মেলে।

আপনি ব্যবহার করতে পারেন \D+তবে এটি নতুন লাইনের সাথেও মিলবে কারণ এটি একটি অঙ্ক ব্যতীত অন্য কোনও চরকে মেলে।

আপনি যদি একই লাইনে অঙ্কগুলি মেলতে চান তবে আপনি একটি অবহেলিত অক্ষর শ্রেণিতে একটি নতুন লাইনের সাথে মিলছে না [^\d\r\n]

আপনার উদাহরণে, আপনি ব্যবহার করেন \dতবে আপনি যদি 1 বা আরও বেশি 0-9 সংখ্যার সাথে মেলে চান তবে আপনি একটি অক্ষর শ্রেণি ব্যবহার করতে পারেন[0-9]+

অঙ্কগুলি এবং শব্দটি বৃহত্তর শব্দের অংশ হওয়া রোধ করতে আপনি শব্দ সীমা ব্যবহার করতে পারেন \b

যদি আপনি এই শব্দটি কোনও সংবেদনশীল উপায়ে মেলাতে চান তবে আপনি RegexOptions.IgnoreCaseএকটি ইনলাইন পরিবর্তনকারী বা ব্যবহার করতে পারেন(?i)

(?i)\b([0-9]+)\b[^\d\r\n]*\bsomeword\b

.NET regex ডেমো দেখুন


2

mtch.Groups["Value"].Valueপ্রয়োজন অনুসারে তথ্য আহরণের জন্য নামযুক্ত ম্যাচ ক্যাপচারগুলি (ডেটা ব্যবহারের জন্য ... ইত্যাদি) ব্যবহার করুন।

(?<Value>\d+)     -- Get the digits
(?<Other>.+?)     -- Capture all text, but minimal (greedy) capture
(?<Key>someword)  -- til the keyword here.

যখন উপরে চালানো হয় ( সঙ্গে IgnorePatternWhiteSpaceঅন্যথায় মন্তব্যও মুছে এবং প্যাটার্ন যোগদানের যেমন এটি চালানোর জন্য (?<Value>\d+)(?<Other>.+?)(?<Key>someword)কোন Regex বিকল্প সহ ) প্রতিটি ডেটা / কী জোড়া জন্য তথ্য পায় এবং একটি একক ম্যাচে প্রতিটি আয়োজন করে।

ফলাফল

এখানে ফলাফল (আপনার দ্বিতীয় উদাহরণের জন্য) যা সমস্ত পৃথক ম্যাচে এবং তাদের গ্রুপে অন্তর্ভুক্ত এবং প্রতিটি ম্যাচে ক্যাপচারগুলি সরবরাহ করে:

Match #0
              [0]:  43434˽of˽someword
  ["Value"]  [1]:  43434
      1 Captures:  43434
  ["Other"]  [2]:  ˽of˽
      2 Captures:  ˽of˽
    ["Key"]  [3]:  someword
      3 Captures:  someword
Match #1
              [0]:  12˽anything˽someword
  ["Value"]  [1]:  12
      1 Captures:  12
  ["Other"]  [2]:  ˽anything˽
      2 Captures:  ˽anything˽
    ["Key"]  [3]:  someword
      3 Captures:  someword
Match #2
              [0]:  2323˽new˽someword
  ["Value"]  [1]:  2323
      1 Captures:  2323
  ["Other"]  [2]:  ˽new˽
      2 Captures:  ˽new˽
    ["Key"]  [3]:  someword
  3 Captures:  someword

দৃশ্যত এখানে যা মিলছে:

এখানে চিত্র বর্ণনা লিখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.