2015-08-18 4 views
5

Regex.Replace का कहना है:रेगेक्स केवल मिलान करने वाले समूहों को प्रतिस्थापित करता है और गैर-मिलान समूहों को अनदेखा करता है?

एक निर्दिष्ट इनपुट स्ट्रिंग, सभी तार है कि एक निर्दिष्ट प्रतिस्थापन तार के साथ एक निर्दिष्ट रेगुलर एक्सप्रेशन से मेल बदल देता है।

मेरे मामले में:

string w_name = "0x010102_default_prg_L2_E2_LDep1_LLC"; 
string regex_exp = @"(?:E\d)([\w\d_]+)(?:_LLC)"; 
w_name = Regex.Replace(w_name, regex_exp, string.Empty); 

आउटपुट:

0x010102_default_prg_L2_ 

लेकिन मैं

0x010102_default_prg_L2_E2_LLC 

उम्मीद कर रहा था क्यों यह मेरी गैर मेल खाने वाले समूह को बदल रहा है (समूह 1 और 3)? और अपेक्षित आउटपुट प्राप्त करने के लिए मैं इसे कैसे ठीक करूं?

Demo

उत्तर

5
समूहों पर कब्जा ताकि आप प्रतिस्थापन भाग में thoses वर्ण देखें और अनावश्यक दूसरा कैप्चरिंग समूह को निकाल सकता है चालू

पहली और आखिरी गैर पर कब्जा समूहों।

string w_name = "0x010102_default_prg_L2_E2_LDep1_LLC"; 
string regex_exp = @"(E\d)[\w\d_]+(_LLC)"; 
w_name = Regex.Replace(w_name, regex_exp, "$1$2"); 

DEMO

या

string regex_exp = @"(?<=E\d)[\w\d_]+(?=_LLC)"; 
w_name = Regex.Replace(w_name, regex_exp, string.Empty); 
+0

यह काम करता है: कृपया "$ 1 $ 2" "$ 1 $ 3" ​​से समूह चयन को ठीक। क्या आप समझा सकते हैं कि यह कैसे काम करता है? अगर मुझे खाली स्ट्रिंग के बजाय "abc" कहने के साथ प्रतिस्थापित करने की आवश्यकता है तो क्या होगा? – greenfeet

+2

@ ग्रीनफीट मुझे अपने $ regex में मौजूद दूसरे कैप समूह को हटाए जाने के बाद से '$ 1 $ 2' को $ 1 $ 3' में बदलने की आवश्यकता क्यों है। 2. बस '$ 1' और '$ 2', यानी' $ 1abc $ 2' के बीच 'abc' जोड़ें। दूसरे उत्तर के लिए, 'string.Empty' के बजाय बस 'abc" 'पर्याप्त होगा। –

+2

आप सही हैं, मैंने नहीं देखा कि आपने दूसरे समूह को हटा दिया, धन्यवाद! – greenfeet

संबंधित मुद्दे