2012-12-24 16 views
5

प्रतिस्थापित न करें मैं मैचों को खोजने के लिए RegEx पैटर्न में प्रतीकों का उपयोग करना चाहता हूं, लेकिन मैं उन्हें प्रतिस्थापित नहीं करना चाहता हूं। यह सी # में वर्ग और नेमस्पेस हेरफेर के लिए है।RegEx - प्रतीकों का उपयोग करके मिलान करें लेकिन उन्हें

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

MyNamespaceLib.EntityDataModelTests.TestsMyClassTests+MyInnerClassTests

बदला जाना चाहिए के रूप में:

MyNamespaceLib.EntityDataModel.TestsMyClass+MyInnerClass

(ध्यान दें, केवल "टेस्ट" की जगह जब यह प्रतीत होता है अतं मै नेमस्पेस भाग का, और जब यह कक्षा/नामस्थान नाम का हिस्सा नहीं है)

मैचों को खोजने में मुझे पहला हिस्सा मिल गया है, लेकिन मैं प्रतीकों को प्रतिस्थापित मैच में रखने के लिए जूझ रहा हूं।

अब तक मेरे पास है:

var input = "MyNamespaceLib.EntityDataModelTests.TestsMyClassTests+MyInnerClassTests";

var output = Regex.Replace(input, "Tests[.+]|$", "");

मैं एक गैर पर कब्जा समूह का उपयोग कर की कोशिश की है, लेकिन मुझे लगता है जिस तरह से मैं कर रहा हूँ के लिए नहीं है इसका उपयोग करने की कोशिश कर रहा है।

धन्यवाद!

उत्तर

6

तो आप क्या करना चाहते हैं . या + से मेल खाता है? का प्रयोग करें एक lookahead:

@"Tests(?![.+])" 
+0

नहीं, इसके विपरीत, मैं ऐसे मैचों को प्रतिस्थापित करना चाहता हूं जो अनिवार्य रूप से "।", "+" या रेखा के अंत के साथ समाप्त हो जाएं। लेकिन यदि "टेस्ट" शब्द किसी नामस्थान या कक्षा के नाम के भीतर प्रकट होता है, तो इसे प्रतिस्थापित नहीं किया जाना चाहिए। – Steve

+0

@ उपयोगकर्ता 1 9 27385: 'टेस्ट (?! [^। +])', फिर। – Ryan

+0

अच्छा, यह पूरी तरह से काम किया। मैंने रेगेक्स में कभी भी लुकहेड का उपयोग नहीं किया है, इसलिए मैं कुछ और पढ़ूंगा। धन्यवाद minitech। – Steve

1

आप Regex.Replace विधि है, जहां तार के साथ जेनरेट कर दिए है मैच को बदलने के लिए की MatchEvaluator अधिभार उपयोग कर सकते हैं। minitech की टिप्पणी प्रति

var output = Regex.Replace(input, @"Tests([.+]|$)", m => m.Groups[1].Value); 

इसके अलावा, आप कर सकते हैं: मैं एक कैप्चरिंग समूह में विशेष simbol मिल (और पहली कैप्चरिंग समूह हमेशा मैच के समूह 1 है), और इस तरह, मूल्य के साथ मैच की जगह भी $ 1 की तरह, Regex.Replace की (स्ट्रिंग, स्ट्रिंग) अधिभार में पहली कैप्चरिंग समूह के लिए उपयोग करें:-केवल लिखने

var output = Regex.Replace(input, @"Tests([.+]|$)", "$1"); 

जिसके अनुसार, एक regex अक्सर है कोड, ताकि आप हमेशा एक गूंगा कर सकते हैं और सरल प्रतिस्थापित:

var output = input.Replace("Tests+","").Replace("Tests.","") ...; 
+0

हाँ, यह काम करेगा, मैं इसे एक RegEx पैटर्न के साथ पूरा करने की कोशिश कर रहा था। मैं करूँगा यह आखिरी है अगर मैं इसे काम नहीं कर सकता। – Steve

+0

हां, यह [इस Regex.Replace अधिभार] (http://msdn.microsoft.com/en-us/library/cft8645c.aspx) के साथ किया जाता है, मैं एक मिनट में एक उदाहरण पकाएगा। – SWeko

+0

यदि आप किसी समूह के मान के साथ कुछ बदलना चाहते हैं, तो आप इसे स्ट्रिंग के अंदर कर सकते हैं: 'Regex.Replace (..., "$ 1") ' – Ryan

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