गो में एकाधिक उद्धृत समूहों को कैप्चर करना
यह आलेख एक विशिष्ट प्रारूप का पालन करने वाली स्ट्रिंग्स को पार्स करने की चुनौती को संबोधित करता है: वैकल्पिक के बाद एक अपरकेस कमांड उद्धृत तर्क. लक्ष्य कमांड और तर्क दोनों को अलग-अलग स्ट्रिंग के रूप में निकालना है।
इस कार्य को संभालने के लिए, एक नियमित अभिव्यक्ति नियोजित है: re1, _ := regexp.Compile(([A-Z] )(?: " (1 )")*). पहला कैप्चरिंग ग्रुप ([A-Z] ) अपरकेस कमांड से मेल खाता है, जबकि दूसरा कैप्चरिंग ग्रुप (?: "([^"] )")* शून्य या अधिक उद्धृत तर्कों से मेल खाता है।
हालाँकि, प्रदान किया गया कोड केवल अंतिम तर्क को कैप्चर करता है। इस समस्या को हल करने के लिए, एक अधिक आरामदायक रेगेक्स का सुझाव दिया गया है: re1, _ := regexp.Compile(([A-Z] )|(?: "(1 )"))। यह रेगेक्स किसी आदेश या तर्क की अनुमति देने के लिए यूनियन | का उपयोग करता है।
कोड को संशोधित करके:
re1, _ := regexp.Compile(`([A-Z] )|(?: "([^"] )")`)
results := re1.FindAllStringSubmatch(`COMMAND "arg1" "arg2" "arg3"`, -1)
fmt.Println("Command:", results[0][1])
for _, arg := range results[1:] {
fmt.Println("Arg:", arg[2])
}
सभी तर्क अब सफलतापूर्वक कैप्चर किए जा सकते हैं। यह संशोधित रेगेक्स अधिक बहुमुखी है, इनपुट प्रारूप में विविधताओं को समायोजित करता है जहां आदेश और तर्क अलग-अलग क्रम में हो सकते हैं।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3