ठीक है, तो मुझे डैश डालने के लिए रेगेक्स डिज़ाइन करने की आवश्यकता है। मुझे एक वेब एपीआई फ़ंक्शन बनाने का काम सौंपा गया है जो इनपुट पैरामीटर के आधार पर विशेष रूप से स्वरूपित स्ट्रिंग देता है। किसी कारण से जो मुझे स्पष्ट नहीं किया गया है, स्रोत डेटा ठीक से स्वरूपित नहीं है, और मुझे सही जगह पर डैश के साथ डेटा को पुन: स्वरूपित करने की आवश्यकता है।

पहले दो वर्णों और स्ट्रिंग की लंबाई के आधार पर एक वैकल्पिक तीसरा डैश है। सौभाग्य से मैं चिंतित नहीं हूं कि वे पात्र क्या हैं। यह प्रणाली एक पासथ्रू है, इसलिए कचरा अंदर, कचरा बाहर। हालांकि, मुझे यह सुनिश्चित करने की ज़रूरत है कि डैश लंबाई पर उचित रूप से दूरी पर हैं।

Structure               Types
XX-9999999999-XX        AB
XX-9999999999-99        CD, EF
XX-9999999999-XXX-99    GH
XX-9999999999-XX-99     IJ, KL

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

AB123456789044 should be AB-01234567890-44 and 
GH1234567890YYY99 becomes GH-01234567890-YYY-99.

अब तक मैं इस मुकाम तक पहुंचा हूं।

^(\w\w)(\d{10})(\w{2,3})(\d\d)?$

जो मेरे प्रश्न (प्रश्नों) की ओर जाता है

1) मैं $1-$2-$3-$4 से बदलने का प्रयास कर रहा हूं, हालांकि, जब भी दशमलव का चौथा खंड होता है, जैसे कि आईजे के मामले में, तो उस और एबी के बीच अंतर करना मुश्किल होता है।

मैंने GH-01234567890-YY-99 और GH-01234567890-YY- प्राप्त किया है।

मैं एक सशर्त कैप्चर समूह को एक प्रतिस्थापन स्ट्रिंग में कैसे संदर्भित करूं जैसे कि इससे संबंधित डैश केवल तभी दिखाई देता है जब समूह मौजूद हो?

-1
Seth 8 मई 2018, 16:03

1 उत्तर

सबसे बढ़िया उत्तर

समस्या यह है कि आपको सशर्त प्रतिस्थापन की आवश्यकता है, और सी # उनको समर्थन नहीं करता है। तो आपको प्रोग्रामेटिक रूप से प्रतिस्थापन करना होगा। कुछ इस तरह:

string resultString = null;
try {
    Regex regexObj = new Regex(@"([A-Z]{2})-?(\d{10})-?(?:([A-Z]{2,3})|(\d{2}))-?(\d{2})?", RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline);
    resultString = regexObj.Replace(subjectString, new MatchEvaluator(ComputeReplacement));
} catch (ArgumentException ex) {
    // Error handling
}

public String ComputeReplacement(Match m) {
    // Vary the replacement text in C# as needed
    return "$1-$2-$3-$4-$5";
}

मैंने यहां वास्तविक RegEx पर बहुत अधिक ध्यान नहीं दिया है, क्योंकि ऐसा लगता है कि आप जानते हैं कि आप इसके साथ क्या कर रहे हैं। डेटा काफी गंदे (आंशिक रूप से स्वरूपित) होने पर मैंने अभी कुछ सशर्त हाइफ़न शामिल किए हैं। स्पष्ट रूप से आपको इसके "वापसी" भाग को संपादित करना होगा, यदि कोई भी कैप्चर खाली है तो सशर्त का उपयोग करना। मैंने आपके लिए उस तर्क पर काम नहीं किया है, क्योंकि C# मेरी ताकत नहीं है।

0
Jaifroid 8 मई 2018, 18:30