C # में regex का उपयोग करके किसी विशेष शब्द से पहले अंक कैसे प्राप्त करें?


10

हम शब्दों से पहले अंक प्राप्त करने के लिए regex के नीचे का उपयोग करेंगे।

उदाहरण :

838123 someWord 8 someWord 12 someWord

(\d+)\s*someWord

लेकिन कभी-कभी संख्या और शब्द के बीच कुछ भी आ जाएगा। कृपया नीचे उदाहरण लाइन देखें।

उदाहरण के लिए:

43434 of someord 12 कुछ कहीं 2323 नया कुछ स्रोत

रेगेक्स का उपयोग करके उस शब्द से पहले सटीक अंक कैसे प्राप्त करें?

कृपया मुझे अपने सुझाव दें।


3
ऐसा लगता है कि मौजूदा पोस्ट आपके प्रश्न का उत्तर देती हैं। कृपया उत्तरदाताओं और भविष्य के पाठकों को बताएं कि क्या आपको उत्तर उपयोगी लगते हैं (एक भ्रमण करें )। अन्यथा कृपया इस बारे में अधिक जानकारी प्रदान करें कि आप क्या खोज रहे हैं और उत्तर आपके मामले के अनुरूप क्यों नहीं हैं।
रेजा अघाई

1
स्पष्ट नहीं है कि आप क्या पूछ रहे हैं ...
जॉनीएल

जवाबों:


14

यह करो:

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

आपको स्वयं अंकों के अलावा कुछ भी स्वीकार करने की आवश्यकता है। इसके अलावा, मैंने दोनों पर विचार किया wऔर Wआपके उदाहरणों में दोनों शामिल थे।

डेमो


क्या आप एक अलग उत्तर की तलाश कर रहे हैं?
रेजा अघाई

@RezaAghaei शायद
CinCout

आपके द्वारा प्रदान किए गए वर्तमान उत्तर के साथ क्या समस्याएं हैं? आप किन सुधारों की तलाश कर रहे हैं?
रेजा अघाई

@RezaAghaei यह तथ्य कि ओपी ने किसी भी उत्तर को स्वीकार नहीं किया है, मुझे लगता है कि अगर मुझे एक कोने का मामला या कुछ याद आ गया है। इसे हल करने के लिए वैकल्पिक दृष्टिकोण भी स्वागत योग्य है।
CinCout

1
@ CinCout-ReinstateMonica कृपया एक संभावित मिस एज केस के लिए मेरा जवाब देखें (यह सुनिश्चित नहीं है कि यह ओपी के लिए प्रासंगिक है)।
स्टीव चेम्बर्स

4

यह मानते हुए कि "कुछ भी" में अंक शामिल नहीं हैं, आप इस regex का उपयोग कर सकते हैं:

(\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, फिर उस पर दूसरे पैटर्न को निष्पादित करेंnumberspace

 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();

जब पहला पैटर्न निष्पादित किया जाता है, तो वाक्य वांछित होगा

43434 of someord 12 कुछ कहीं 2323 नया कुछ स्रोत

परिवर्तन:

४३४३४ कहीं-कहीं १२ कहीं २३२३ कहीं


2

लेकिन कभी-कभी संख्या और शब्द के बीच कुछ भी आ जाएगा। कृपया नीचे उदाहरण लाइन देखें।

उदाहरण के लिए:

43434 of someord 12 कुछ कहीं 2323 नया कुछ स्रोत

इसे इस्तेमाल करे

(\ D +) (। *?) Someword

व्याख्या की

\ d + - संख्या

। *? - संख्या के बाद कुछ भी लेकिन न्यूनतम घटना।

someord - कुछ हद तक सटीक मेल

डेमो


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

नेत्रहीन यहाँ है जो मेल खाता है:

यहां छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.