2013-07-04 5 views
6

की सामग्री निकालने की सामग्री मैंने अपने कुछ संबंधित प्रश्न देखे हैं, और मैंने उन्हें आजमाया लेकिन वे काम नहीं करते हैं। मैं आईडी "अंगूठे" के साथ एक div से सामग्री मिलान करना चाहता हूँ। लेकिन regex.Success रिटर्न झूठी :(सी # रेगेक्स एक div

Match regex = Regex.Match(html, @"<div[^>]*id=""thumbs"">(.+?)</div>"); 
+8

लेकिन पर * टिप्पणी प्यार एचटीएमएल चपलता पैक – Sayse

उत्तर

8

Regex HTML फ़ाइलों को पार्स करने के लिए एक अच्छा विकल्प नहीं है ..

एचटीएमएल सख्त नहीं है और न ही वह अपने स्वरूप के साथ नियमित रूप से है ..

उपयोग htmlagilitypack


का उपयोग क्यों करें पार्सर?

पर विचार करें अपने regex..There मामलों में जहां आप अपने कोड को तोड़ सकते थे की अनंत संख्या रहे हैं

  • अगर वहाँ नेस्टेड divs
  • कुछ divs न एक समाप्त होने टैग है! (सिवाय हैं आपका रेगुलर एक्सप्रेशन से काम नहीं करेगा एक्सएचटीएमएल)

आप इस कोड का उपयोग कर सकते हैं का उपयोग कर इसे पुनः प्राप्त करने HtmlAgilityPack

HtmlDocument doc = new HtmlDocument(); 
doc.Load(yourStream); 

var itemList = doc.DocumentNode.SelectNodes("//div[@id='thumbs']")//this xpath selects all div with thubs id 
        .Select(p => p.InnerText) 
        .ToList(); 

//itemList now contain all the div tags content having its id as thumbs 
+0

के लिए एक उम्मीदवार की तरह लगता है अनियमित * अभिव्यक्ति :) – Charleh

+0

मैं इसे देख लूंगा, धन्यवाद। –

+0

@ चार्लेह: डी ..... – Anirudha

1

नहीं, मुझे नहीं लगता कि उसे भागने की जरूरत है। उसके पास पैटर्न के सामने @ है। मुझे लगता है कि यह सही है:

<div[^>]*id="thumbs">(.+?)</div> 

तो कोई डबल डबल कोट्स

0

इस प्रयास करें:

Regex r = new Regex(@"(?<text>(<div\s*?id=(\""|&quot;|&\#34;)" 
    + @"thumb(\""|&quot;|&\#34;).*?>)(?>.*?</div>|.*?<div " 
    + @"(?>depth)|.*?</div> (?>-depth))*)(?(depth)(?!)).*?</div>", 
    RegexOptions.Singleline); 
विषय बंद आंशिक रूप से