2013-02-26 96 views
6

तो मैं इस स्ट्रिंग [] है:एक regex के माध्यम से लूपिंग की जगह

string[] middleXMLTags = {"</Table1><Table2>", "</Table2><Table3>"}; 

और मैं इसके साथ कुछ इस तरह करना चाहते हैं: अंत में

int i = 0; 
foreach (regex where it finds the replacement string) 
{ 
    response = Regex.Replace(response, "</Table><Table>", middleXMLTags[i]); 
    i++; 
} 
response = Regex.Replace(response, "<Table>", <Table1>); 
response = Regex.Replace(response, "</Table>", </Table3>); 

, मैं सिर्फ पूछ रहा हूँ अगर यह किसी भी तरह से Regex के माध्यम से लूप संभव है, और इसलिए string[] में संग्रहीत विभिन्न मानों के साथ string को प्रतिस्थापित करने में सक्षम होना। यह foreach लूप होना आवश्यक नहीं है, और मुझे पता है कि यह कोड हास्यास्पद है, लेकिन मैंने इसे स्पष्ट संभव प्रश्न पूछने के लिए सुना है। कृपया मेरे लिए मेरे किसी भी प्रश्न पर टिप्पणी करें।

सभी मदद के लिए धन्यवाद =)

+2

देखो (http://msdn.microsoft.com/en-GB/library/system.text.regularexpressions.regex.matches.aspx)। –

+3

[रेगेक्स के साथ एचटीएमएल का विश्लेषण न करें] (http://stackoverflow.com/a/1732454/558018)। – AgentFire

उत्तर

6

आप प्रतिस्थापन तार के माध्यम से गणना कर सकते हैं। आपको अपनी जरूरतों के मुताबिक इसे तैयार करना होगा, लेकिन मुझे लगता है कि ऐसा कुछ काम करेगा। [Regex.Matches] पर

Regex needle = new Regex("\[letter\]"); 
string haystack = "123456[letter]123456[letter]123456[letter]"; 
string[] replacements = new string[] { "a", "b", "c" }; 

int i = 0; 
while (needle.IsMatch(haystack)) 
{ 
    if (i >= replacements.Length) 
    { 
     break; 
    } 

    haystack = needle.Replace(haystack, replacements[i], 1); 
    i++; 
} 
+1

इस समाधान पर एक नोट यह है कि यह ओवरलैपिंग पैटर्न से मेल खाता है और साथ ही पहले प्रतिस्थापन से किसी भी पाठ से मेल खाता है। यह वांछित हो सकता है या नहीं भी हो सकता है। –

6

मैं "Regex के साथ HTML पार्स नहीं है" चर्चा छोड़ सकते हैं और सुझाव है कि आप Regex.Replace के लिए भार के कि एक MatchEvaluator प्रतिनिधि लेने को देखेंगे।

असल में, आप प्रतिस्थापन() विधि में एक प्रतिनिधि को पास कर सकते हैं जिसे प्रत्येक मैच के लिए बुलाया जाता है और प्रतिस्थापन टेक्स्ट देता है।

यह MSDN पृष्ठ इंडेक्स नंबर को प्रतिस्थापन टेक्स्ट में डालने का एक उदाहरण देता है। प्रतिस्थापन पाठ प्राप्त करने के लिए आपको अपने सरणी में इंडेक्स का उपयोग करने में सक्षम होना चाहिए।

यहां नमूने के अपने उदाहरण को दर्शाती है:

string[] middleXMLTags = {"</Table1><Table2>", "</Table2><Table3>"}; 

string response = "</Table><Table><foo/></Table><Table>"; 
Console.WriteLine(response); 
int i = 0; 

response = Regex.Replace(response,@"</Table><Table>",m=>middleXMLTags[i++]); 
Console.WriteLine(response); 

आउटपुट:

</Table><Table><foo/></Table><Table> 
</Table1><Table2><foo/></Table2><Table3> 
+0

यह लाइन बहुत बढ़िया है और अधिक अंक योग्य है: प्रतिक्रिया = Regex.Replace (प्रतिक्रिया, @ "

", m => middleXMLTags [i ++]); – Richard