स्ट्रिंग को दोबारा सुधारने के लिए रेगेक्स का उपयोग करने का कोई तरीका है?
मैं इस तरह एक स्ट्रिंग है AEY4293
और मैं इस तरह के अक्षरों और संख्याओं के बीच एक डैश जोड़ना चाहता हूं AEY-4293
.
मैं कुछ ऐसा खोजने की कोशिश कर रहा था s/pattern/replacement/
, लेकिन मैं इसे नहीं ढूंढ सका।
मैं उपयोग कर ब्लॉक का चयन कर सकते हैं /(w+)(d+)/
तो अगर मैं पाठ को दोबारा सुधारने के लिए एक पैटर्न दे सकता हूं 1-2
यह बहुत अच्छा होगा।
धन्यवाद!
उत्तर:
जवाब के लिए 2 № 1irb(main):001:0> "AEY4293".sub(/(D+)(d+)/, "1-2")
=> "AEY-4293"
जवाब के लिए 2 № 2
"AEY4293".sub(/(?<=w)(?=d)/, "-")
आप भी कर सकते हैं
"AEY4293".sub(/(?=d)/, "-")
जो एमयू के करीब आता है वह बहुत छोटा जवाब है।
उत्तर № 3 के लिए 1
रेगेक्स होगा:
/([A-Z]+)(d+)/
प्रतिस्थापन पैटर्न होगा:
1-2
अभिव्यक्ति के साथ एक समस्या है /(w+)(d+)/
, इसलिये w
अल्फा और संख्या दोनों से मेल खाता है। तो, इनपुट के साथ AEY4293
, w+
मैच होगा AEY429
तथा d+
पिछला मैच होगा 3
.
उत्तर के लिए 1 № 4
यदि गैर-न्यूमेरिक उपसर्ग हमेशा तीन वर्ण होता है तो आप इसे नियमित अभिव्यक्ति के बिना कर सकते हैं:
s = "AEY4293"
s[3,0] = "-"
# s is now "AEY-4293"
या, यदि आप उपसर्ग आकार पर थोड़ा अधिक लचीलापन चाहते हैं, तो आप इसका उपयोग कर सकते हैं index
उपरोक्त के साथ संयुक्त:
s[s.index(/d/), 0] = "-"
मुझे इसके लिए ब्रैकेट-असाइनमेंट नोटेशन पसंद है क्योंकि यह आपके इरादे से अच्छी तरह से मेल खाता है।
जवाब के लिए 0 № 5
वहां एक है str.sub(pattern, replacement)
उस के लिए विधि। प्रतिस्थापन के साथ एक स्टिंग है 1
और संदर्भों पर भी।