2009-06-11 15 views
5

मैं एचटीएमएल डॉक्टर, से शरीर निकालने के लिए रेगेक्स का उपयोग कैसे करूं, यह ध्यान में रखते हुए कि एचटीएमएल और बॉडी टैग अपरकेस, लोअरकेस या हो सकता है?रेगेक्स निकालें एचटीएमएल बॉडी

+5

http://stackoverflow.com/questions/356340/regular-expression-to-extract-html-body-content का डुप्लिकेट? – M4N

उत्तर

9

इसके लिए नियमित अभिव्यक्ति का उपयोग न करें - Html Agility Pack जैसे कुछ का उपयोग करें।

यह एक चुस्त HTML पार्सर कि पढ़ने बनाता है/डोम लिखने और सादा XPATH या XSLT का समर्थन करता है (आप वास्तव में XPATH है और न ही XSLT इसका इस्तेमाल करने को समझने के लिए नहीं है, चिंता मत करो। ..)। यह एक .NET कोड लाइब्रेरी है जो आपको "वेब से बाहर" HTML फ़ाइलों को पार्स करने की अनुमति देता है। पार्सर "वास्तविक दुनिया" विकृत HTML के साथ बहुत सहिष्णु है। ऑब्जेक्ट मॉडल System.Xml का प्रस्ताव करता है, लेकिन HTML दस्तावेज़ों (या स्ट्रीम) के लिए बहुत समान है।

फिर आप XPATH के साथ body निकाल सकते हैं।

+0

मैं सहमत हूं। मैंने इसका इस्तेमाल किया है और कहना चाहिए कि यह तेज़, साफ और साफ है। –

0

यह आपको बहुत करीब मिलना चाहिए:

(?is)<body(?:\s[^>]*)>(.*?)(?:</\s*body\s*>|</\s*html\s*>|$) 
+0

कृपया विस्तार समाधान प्रदान करें। स्वच्छ और साफ समाधान के लिए – ShaileshDev

11

कैसे कुछ इस तरह के बारे में?

यह theBody नाम के एक समूह में <body></body> टैग के बीच सब कुछ (मामले RegexOptions.IgnoreCase की वजह से असंवेदनशील) कैप्चर करता है।

RegexOptions.Singleline हमें मल्टीलाइन HTML को एक स्ट्रिंग के रूप में संभालने की अनुमति देता है।

यदि एचटीएमएल में <body></body> टैग नहीं हैं, तो Success मैच की संपत्ति झूठी होगी।

 string html; 

     // Populate the html string here 

     RegexOptions options = RegexOptions.IgnoreCase | RegexOptions.Singleline; 
     Regex regx = new Regex("<body>(?<theBody>.*)</body>", options); 

     Match match = regx.Match(html); 

     if (match.Success) { 
      string theBody = match.Groups["theBody"].Value; 
     } 
+0

+1 –

+0

धन्यवाद! यही वह है जिसके लिए मैं प्रयास करता हूं। – Darryl

+0

ग्रेट, यह वही करता है जो मुझे चाहिए था। – Nadjib

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