दिलचस्प पोस्ट
एंड्रॉइड वेबदृश्य और स्थानीय स्टोरेज जावा में एक बूलियन पर एक बिटवे ऑपरेटर का प्रभाव एंड्रॉइड फेसबुक 4.0 एसडीके ईमेल, जन्म तिथि और उपयोगकर्ता का लिंग कैसे प्राप्त करें I एक्लिप्से द्वारा जार निर्यात करते समय "मुख्य वर्ग की त्रुटि नहीं मिल पाई" त्रुटि PHP: एचटीएमएल स्ट्रिंग से एक विशिष्ट टैग स्ट्रिप? जावा में एक फ़ाइल की प्रतिलिपि करने के लिए मानक संक्षिप्त तरीके? त्रुटि: "एडीबी कनेक्शन त्रुटि: रिमोट होस्ट द्वारा एक मौजूदा कनेक्शन जबरन बंद किया गया था" मावेन में "रिएक्टर" क्या है? # परिभाषित चर का प्रकार JAVAFX / WebView / WebEngine FireBugLite या कुछ अन्य डीबगर? Three.js / WebGL: चौराहे चौराहे पर बड़े भाग दिखाई देते हैं क्या मैं सी + + मुख्य फ़ंक्शन और वर्गों को संकलित और लिंक पर उद्देश्य-सी और / या सी रूटीन से अलग कर सकता हूं? द्विआधारी फ़ाइलें दूषित – कैसे AngularJS के साथ बाइनरी फ़ाइलें डाउनलोड करें अजगर में त्रुटि परिभाषित नहीं है सरणी बनाम वस्तु कार्यक्षमता जावास्क्रिप्ट में

Microsoft Excel में रेग्युलर एक्सप्रेशंस (रेगेक्स) का उपयोग कैसे करें इन-सेल और लूप दोनों

मैं एक्सेल में नियमित अभिव्यक्ति का उपयोग कैसे कर सकता हूं और डेटा के हेरफेर के लिए सेटअप जैसे एक्सेल के शक्तिशाली ग्रिड का लाभ उठा सकता हूं?

  • मिलान वाले पैटर्न या स्ट्रिंग में प्रतिस्थापित मूल्य की वापसी के लिए इन-सेल फ़ंक्शन।
  • डेटा के एक कॉलम के माध्यम से पाश को लूप और आसन्न कोशिकाओं से मिलान निकालें।
  • क्या सेटअप आवश्यक है?
  • रेगेक्स एक्सप्रेशंस के लिए एक्सेल के विशेष अक्षर क्या हैं?

मैं समझता हूं कि कई स्थितियों ( रेगुलर एक्सप्रेशन का उपयोग करने के लिए या नहीं ) के लिए रेगेक्स आदर्श नहीं है क्योंकि एक्सेल उपयोग कर सकता है Left , Mid , Right , Instr टाइप कमांड के लिए इसी तरह की हेराफेरी।

वेब के समाधान से एकत्रित समाधान "Microsoft Excel में रेग्युलर एक्सप्रेशंस (रेगेक्स) का उपयोग कैसे करें इन-सेल और लूप दोनों"

पैटर्न मिलान के लिए नियमित अभिव्यक्तियां उपयोग की जाती हैं।

Excel में उपयोग करने के लिए इन चरणों का पालन करें:

चरण 1 : "माइक्रोसॉफ्ट VBScript नियमित अभिव्यक्ति 5.5" के लिए VBA संदर्भ जोड़ें

  • "डेवलपर" टैब चुनें ( मेरे पास यह टैब नहीं है, मैं क्या करूँ? )
  • 'कोड' रिबन अनुभाग से "विज़ुअल बेसिक" आइकन चुनें
  • "अनुप्रयोग के लिए माइक्रोसॉफ्ट विज़ुअल बेसिक" विंडो में शीर्ष मेनू से "उपकरण" चुनें।
  • "संदर्भ" का चयन करें
  • अपनी कार्यपुस्तिका में शामिल करने के लिए "Microsoft VBScript Regular Expressions 5.5" के बगल में स्थित बॉक्स को चेक करें।
  • ओके पर क्लिक करें"

चरण 2 : अपने पैटर्न को परिभाषित करें

बुनियादी परिभाषाएं:

- रेंज

  • उदाहरण के लिए ए से एक से कम केस अक्षरों से मेल खाता है
  • उदा 0-5 0 से 5 से किसी भी संख्या से मेल खाता है

[] इन ब्रैकेट के अंदर ऑब्जेक्ट्स में से एक का मिलान करें।

  • उदाहरण [a] पत्र से मेल खाता है a
  • उदाहरण [abc] एक पत्र से मेल खाता है जो कि ए, बी या सी हो सकता है
  • उदाहरण [az] वर्णमाला के किसी एक भी कम केस पत्र से मेल खाता है

() वापसी उद्देश्यों के लिए समूह अलग अलग मैचों नीचे दिए गए उदाहरण देखें।

{} उसके पहले परिभाषित पैटर्न की दोहराई गई प्रतियों के लिए गुणक।

  • उदाहरण [a]{2} दो लगातार कम केस पत्रों से मेल खाता है: aa
  • उदाहरण [a]{1,3} मैच कम से कम एक और तीन लोअर केस अक्षर a , aaa , aaa

+ इससे पहले परिभाषित पैटर्न का कम-से-कम एक या उससे अधिक मिलान करें

  • उदाहरण के लिए a+ लगातार a , a , aaa , और इसी तरह से मेल खाएगा

? इससे पहले परिभाषित शून्य या एक पैटर्न के साथ मिलान करें।

  • उदाहरण पैटर्न मौजूद हो सकता है या नहीं, लेकिन केवल एक बार मिलान किया जा सकता है।
  • उदाहरण [az]? रिक्त स्ट्रिंग या किसी भी एक कम केस पत्र से मेल खाता है

* इससे पहले परिभाषित शून्य या अधिक पैटर्न का मिलान करें – उदाहरण के लिए वाइल्डकार्ड जो मौजूद हो सकता है या हो सकता है। – उदाहरण [az]* रिक्त स्ट्रिंग या लोअर केस अक्षरों की स्ट्रिंग से मेल खाता है

. न्यूलाइन के अलावा किसी भी चरित्र से मिलान करता है \n

  • उदाहरण a. इसके साथ शुरू होने वाली एक दो वर्ण स्ट्रिंग से मेल खाता है और \n बिना कुछ के साथ समाप्त हो रहा है

| या ऑपरेटर

  • उदाहरण a|b मतलब है या तो a या b का मिलान किया जा सकता है।
  • उदाहरण के लिए red|white|orange रंगों में से एक के बराबर मेल खाता है

^ NOT ऑपरेटर

  • उदाहरण [^0-9] चरित्र में कोई संख्या नहीं हो सकती
  • उदाहरण [^aA] चरित्र कम केस नहीं हो सकता a या ऊपरी केस A

\ Escapes विशेष चरित्र है जो निम्न (व्यवहार ऊपर ओवरराइड)

  • उदा \. , \\ , \( , \? , \$ , \^

एंकरिंग पैटर्न:

^ स्ट्रिंग की शुरुआत में मिलान होना चाहिए

  • उदाहरण ^a प्रथम वर्ण कम केस अक्षर होना चाहिए
  • उदाहरण ^[0-9] पहला चरित्र एक संख्या होना चाहिए।

स्ट्रिंग के अंत में $ मैच होना चाहिए

  • उदाहरण के a$ अंतिम अक्षर कम केस अक्षर होना चाहिए

प्राथमिकता तालिका:

 Order Name Representation 1 Parentheses ( ) 2 Multipliers ? + * {m,n} {m, n}? 3 Sequence & Anchors abc ^ $ 4 Alternation | 

पूर्वनिर्धारित वर्ण संकेताक्षर:

 abr same as meaning \d [0-9] Any single digit \D [^0-9] Any single character that's not a digit \w [a-zA-Z0-9_] Any word character \W [^a-zA-Z0-9_] Any non-word character \s [ \r\t\n\f] Any space character \S [^ \r\t\n\f] Any non-space character \n [\n] New line 

उदाहरण 1 : मैक्रो के रूप में चलाएं

निम्न उदाहरण मैक्रो सेल A1 में मान को देखता है कि यह देखने के लिए कि पहले 1 या 2 वर्ण अंक हैं। यदि हां, तो उन्हें निकाल दिया जाता है और बाकी स्ट्रिंग प्रदर्शित होती है। यदि नहीं, तो एक बॉक्स आपको बताता है कि कोई मैच नहीं मिला है। 12abc abc की सेल A1 मान abc वापस आ जाएगी, 1 abc मान abc वापस आएगा, abc 12abc मान " 12abc नहीं" लौटाएगा, क्योंकि अंक स्ट्रिंग की शुरुआत में नहीं थे

 Private Sub simpleRegex() Dim strPattern As String: strPattern = "^[0-9]{1,2}" Dim strReplace As String: strReplace = "" Dim regEx As New RegExp Dim strInput As String Dim Myrange As Range Set Myrange = ActiveSheet.Range("A1") If strPattern <> "" Then strInput = Myrange.Value With regEx .Global = True .MultiLine = True .IgnoreCase = False .Pattern = strPattern End With If regEx.Test(strInput) Then MsgBox (regEx.Replace(strInput, strReplace)) Else MsgBox ("Not matched") End If End If End Sub 

उदाहरण 2 : इन-सेल फ़ंक्शन के रूप में चलाएं

यह उदाहरण 1 उदाहरण के समान है, लेकिन इन-सेल फ़ंक्शन के रूप में चलाने के लिए सेटअप है। का उपयोग करने के लिए, इस कोड को बदलें:

 Function simpleCellRegex(Myrange As Range) As String Dim regEx As New RegExp Dim strPattern As String Dim strInput As String Dim strReplace As String Dim strOutput As String strPattern = "^[0-9]{1,3}" If strPattern <> "" Then strInput = Myrange.Value strReplace = "" With regEx .Global = True .MultiLine = True .IgnoreCase = False .Pattern = strPattern End With If regEx.test(strInput) Then simpleCellRegex = regEx.Replace(strInput, strReplace) Else simpleCellRegex = "Not matched" End If End If End Function 

सेल A1 में अपनी तार ("12 बीसी") रखें सेल B1 में यह सूत्र =simpleCellRegex(A1) सेल =simpleCellRegex(A1) दर्ज करें और परिणाम "एबीसी" होगा।

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


उदाहरण 3 : रेंज के माध्यम से लूप

यह उदाहरण 1 उदाहरण के समान है, लेकिन कक्षों की एक सीमा के माध्यम से छोरों।

 Private Sub simpleRegex() Dim strPattern As String: strPattern = "^[0-9]{1,2}" Dim strReplace As String: strReplace = "" Dim regEx As New RegExp Dim strInput As String Dim Myrange As Range Set Myrange = ActiveSheet.Range("A1:A5") For Each cell In Myrange If strPattern <> "" Then strInput = cell.Value With regEx .Global = True .MultiLine = True .IgnoreCase = False .Pattern = strPattern End With If regEx.Test(strInput) Then MsgBox (regEx.Replace(strInput, strReplace)) Else MsgBox ("Not matched") End If End If Next End Sub 

उदाहरण 4 : विभाजन अलग-अलग पैटर्न

यह उदाहरण एक श्रेणी ( A1 , A2 और A3 ) के माध्यम से A2 और तीन अंकों के साथ शुरू होने वाली स्ट्रिंग के लिए एक अल्फा वर्ण के बाद दिखता है और उसके बाद 4 संख्यात्मक अंक। उत्पादन () का उपयोग करके आसन्न कोशिकाओं में पैटर्न मिलान अलग करता है। $1 () के पहले समूह के भीतर मेल खाने वाले पहले पैटर्न का प्रतिनिधित्व करता है

 Private Sub splitUpRegexPattern() Dim regEx As New RegExp Dim strPattern As String Dim strInput As String Dim strReplace As String Dim Myrange As Range Set Myrange = ActiveSheet.Range("A1:A3") For Each C In Myrange strPattern = "(^[0-9]{3})([a-zA-Z])([0-9]{4})" If strPattern <> "" Then strInput = C.Value strReplace = "$1" With regEx .Global = True .MultiLine = True .IgnoreCase = False .Pattern = strPattern End With If regEx.test(strInput) Then C.Offset(0, 1) = regEx.Replace(strInput, "$1") C.Offset(0, 2) = regEx.Replace(strInput, "$2") C.Offset(0, 3) = regEx.Replace(strInput, "$3") Else C.Offset(0, 1) = "(Not matched)" End If End If Next End Sub 

परिणाम:

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


अतिरिक्त पैटर्न उदाहरण

 String Regex Pattern Explanation a1aaa [a-zA-Z][0-9][a-zA-Z]{3} Single alpha, single digit, three alpha characters a1aaa [a-zA-Z]?[0-9][a-zA-Z]{3} May or may not have preceeding alpha character a1aaa [a-zA-Z][0-9][a-zA-Z]{0,3} Single alpha, single digit, 0 to 3 alpha characters a1aaa [a-zA-Z][0-9][a-zA-Z]* Single alpha, single digit, followed by any number of alpha characters </i8> \<\/[a-zA-Z][0-9]\> Exact non-word character except any single alpha followed by any single digit 

एक्सेल फ़ार्मुलों में सीधे नियमित अभिव्यक्तियों का उपयोग करने के लिए निम्नलिखित यूडीएफ (उपयोगकर्ता परिभाषित फ़ंक्शन) मदद की जा सकती है यह अधिक या कम सीधे एक्सेल फ़ंक्शन के रूप में नियमित अभिव्यक्ति की कार्यक्षमता को उजागर करता है।

यह काम किस प्रकार करता है

इसमें 2-3 पैरामीटर लगते हैं

  1. नियमित अभिव्यक्ति का उपयोग करने के लिए एक पाठ
  2. एक नियमित अभिव्यक्ति
  3. एक स्वरूप स्ट्रिंग जो निर्दिष्ट करना चाहिए कि परिणाम कैसा दिखता है इसमें $0 , $1 , $2 और इतने पर शामिल हो सकते हैं। $0 पूरे मैच है, $1 और ऊपर नियमित एक्सप्रेशन में संबंधित मिलान समूहों के अनुरूप है डिफ़ॉल्ट रूप से $0

कुछ उदाहरण

एक ईमेल पता निकालना:

 =regex("Peter Gordon: some@email.com, 47", "\w+@\w+\.\w+") =regex("Peter Gordon: some@email.com, 47", "\w+@\w+\.\w+", "$0") 

में परिणाम: some@email.com

कई सबस्ट्रिंग निकाले जा रहे हैं:

 =regex("Peter Gordon: some@email.com, 47", "^(.+): (.+), (\d+)$", "E-Mail: $2, Name: $1") 

में परिणाम: E-Mail: some@email.com, Name: Peter Gordon

एकाधिक कोशिकाओं में अपने घटकों में एक एकल कक्ष में एक संयुक्त स्ट्रिंग को अलग करने के लिए:

 =regex("Peter Gordon: some@email.com, 47", "^(.+): (.+), (\d+)$", "$" & 1) =regex("Peter Gordon: some@email.com, 47", "^(.+): (.+), (\d+)$", "$" & 2) 

में परिणाम: Peter Gordon some@email.com

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

इस यूडीएफ का उपयोग करने के लिए निम्नलिखित करें (मोटे तौर पर इस माइक्रोसॉफ्ट पेज पर आधारित है। उनके पास कुछ अच्छी अतिरिक्त जानकारी है!):

  1. Excel में एक मैक्रो सक्षम फ़ाइल ('.xlsm') में ALT+F11 अनुप्रयोग संपादक के लिए Microsoft Visual Basic खोलने के लिए पुश।
  2. नियमित अभिव्यक्ति पुस्तकालय के लिए वीबीए संदर्भ जोड़ें ( पोर्टलैंड रनर ++ उत्तर से बेतरतीब ढंग से कॉपी किया गया):
    1. उपकरण -> संदर्भ पर क्लिक करें (कृपया जर्मन स्क्रीनशॉट का बहाना करें) उपकरण -> संदर्भ
    2. सूची में माइक्रोसॉफ्ट वीबीस्क्रिप्ट रेग्युलर एक्सप्रेशंस 5.5 खोजें और उसके बगल में स्थित चेकबॉक्स पर क्लिक करें।
    3. ठीक क्लिक करें
  3. सम्मिलित करें मॉड्यूल पर क्लिक करें । यदि आप अपने मॉड्यूल को एक अलग नाम देते हैं तो सुनिश्चित करें कि मॉड्यूल में यूडीएफ के समान नाम नहीं है (जैसे कि मॉड्यूल Regex नामकरण और फ़ंक्शन regex कारण #NAME! त्रुटियां)।

    आइकन पंक्ति में दूसरा आइकन -> मॉड्यूल

  4. बीच में बड़े टेक्स्ट विंडो में निम्न सम्मिलित करें:

     Function regex(strInput As String, matchPattern As String, Optional ByVal outputPattern As String = "$0") As Variant Dim inputRegexObj As New VBScript_RegExp_55.RegExp, outputRegexObj As New VBScript_RegExp_55.RegExp, outReplaceRegexObj As New VBScript_RegExp_55.RegExp Dim inputMatches As Object, replaceMatches As Object, replaceMatch As Object Dim replaceNumber As Integer With inputRegexObj .Global = True .MultiLine = True .IgnoreCase = False .Pattern = matchPattern End With With outputRegexObj .Global = True .MultiLine = True .IgnoreCase = False .Pattern = "\$(\d+)" End With With outReplaceRegexObj .Global = True .MultiLine = True .IgnoreCase = False End With Set inputMatches = inputRegexObj.Execute(strInput) If inputMatches.Count = 0 Then regex = False Else Set replaceMatches = outputRegexObj.Execute(outputPattern) For Each replaceMatch In replaceMatches replaceNumber = replaceMatch.SubMatches(0) outReplaceRegexObj.Pattern = "\$" & replaceNumber If replaceNumber = 0 Then outputPattern = outReplaceRegexObj.Replace(outputPattern, inputMatches(0).Value) Else If replaceNumber > inputMatches(0).SubMatches.Count Then 'regex = "A to high $ tag found. Largest allowed is $" & inputMatches(0).SubMatches.Count & "." regex = CVErr(xlErrValue) Exit Function Else outputPattern = outReplaceRegexObj.Replace(outputPattern, inputMatches(0).SubMatches(replaceNumber - 1)) End If End If Next regex = outputPattern End If End Function 
  5. अनुप्रयोग संपादक विंडो के लिए Microsoft Visual Basic सहेजें और बंद करें

जल्दी में उन लोगों के लिए पैट्सज के उत्तर का विस्तार करना

  1. एक्सेल कार्यपुस्तिका खोलें
  2. VBA / मैक्रोज विंडो खोलने के लिए Alt + F11
  3. उपकरण के संदर्भ में regex के संदर्भ में संदर्भ जोड़ें
    ! [एक्सेल VBA फॉर्म संदर्भ जोड़ें
  4. और Microsoft VBScript नियमित अभिव्यक्ति 5.5 का चयन करना
    ! [एक्सेल VBA regex संदर्भ जोड़ें
  5. एक नया मॉड्यूल डालें (कोड को अन्यथा यह काम नहीं करता है मॉड्यूल में रहने की जरूरत है)
    ! [एक्सेल VBA सम्मिलन कोड मॉड्यूल
  6. नए डाला मॉड्यूल में,
    [मॉड्यूल में एक्सेल VBA डालने कोड
  7. निम्नलिखित कोड जोड़ें:

     Function RegxFunc(strInput As String, regexPattern As String) As String Dim regEx As New RegExp With regEx .Global = True .MultiLine = True .IgnoreCase = False .pattern = regexPattern End With If regEx.Test(strInput) Then Set matches = regEx.Execute(strInput) RegxFunc = matches(0).Value Else RegxFunc = "not matched" End If End Function 
  8. Regex पैटर्न कोशिकाओं में से एक में रखा गया है और इस पर पूर्ण संदर्भ का उपयोग किया जाता है [एक्सेल regex फ़ंक्शन इन-सेल उपयोग फ़ंक्शन को कार्यपुस्तिका से बंधित किया जाएगा, जिसमें उसे बनाया गया है
    यदि अलग-अलग कार्यपुस्तिकाओं में इसका उपयोग करने की आवश्यकता है, तो फ़ंक्शन को Personal.XLSB में संग्रहीत करें

मैं एक विशेषज्ञ नहीं हूं जैसे आप लोग हैं, फिर भी मेरा रास्ता है।

 Function RegParse(ByVal pattern As String, ByVal html As String) Dim regex As RegExp Set regex = New RegExp With regex .IgnoreCase = True 'ignoring cases while regex engine performs the search. .pattern = pattern 'declaring regex pattern. .Global = False 'restricting regex to find only first match. If .Test(html) Then 'Testing if the pattern matches or not mStr = .Execute(html)(0) '.Execute(html)(0) will provide the String which matches with Regex RegParse = .Replace(mStr, "$1") '.Replace function will replace the String with whatever is in the first set of braces - $1. Else RegParse = "#N/A" End If End With End Function 

मुझे इसे सेल फ़ंक्शन (जैसे SUM या VLOOKUP) के रूप में उपयोग करने की आवश्यकता है और पाया कि यह आसान था:

  1. सुनिश्चित करें कि आप मैक्रो सक्षम किए गए Excel फ़ाइल में हैं (एक्सएलएसएम के रूप में सहेजें)।
  2. ओपन डेवलपर टूल ALT+F11
  3. अन्य उत्तर के रूप में माइक्रोसॉफ्ट VBScript नियमित अभिव्यक्ति 5.5 जोड़ें
  4. कार्यपुस्तिका में या अपने स्वयं के मॉड्यूल में निम्न फ़ंक्शन बनाएं:

     Function REGPLACE(myRange As Range, matchPattern As String, outputPattern As String) As Variant Dim regex As New VBScript_RegExp_55.RegExp Dim strInput As String strInput = myRange.Value With regex .Global = True .MultiLine = True .IgnoreCase = False .Pattern = matchPattern End With REGPLACE = regex.Replace(strInput, outputPattern) End Function 
  5. तब आप =REGPLACE(B1, "(\w) (\d+)", "$1$2") साथ सेल में उपयोग कर सकते हैं (उदा: "A 243" से "A243")

@ पात्ज़िमः बहुत उपयोगी, धन्यवाद। एक regex_subst () फ़ंक्शन जोड़ा गया उदाहरण:

 =regex_subst("watermellon", "[aeiou]", "") ---> wtrmlln =regex_subst("watermellon", "[^aeiou]", "") ---> aeeo 

यहां सरलीकृत कोड है (मेरे लिए सरल, वैसे भी) मैं अपने उदाहरणों की तरह कार्य करने के लिए ऊपर का उपयोग करने के लिए एक उपयुक्त आउटपुट पैटर्न बनाने का पता नहीं लगा सका:

 Function regex_subst( _ strInput As String _ , matchPattern As String _ , Optional ByVal replacePattern As String = "" _ ) As Variant Dim inputRegexObj As New VBScript_RegExp_55.RegExp With inputRegexObj .Global = True .MultiLine = True .IgnoreCase = False .Pattern = matchPattern End With regex_subst = inputRegexObj.Replace(strInput, replacePattern) End Function