2009-06-11 17 views
5

Jak używać Regex do wyodrębniania treści z dokumentu html, , biorąc pod uwagę, że znaczniki html i body mogą być zapisane wielkimi, małymi literami lub mogą nie istnieć?Wyciąg Regex html Body

+5

Duplikat strony http://stackoverflow.com/questions/356340/regular-expression-to-extract-html-body-content? – M4N

Odpowiedz

9

Nie używaj do tego celu wyrażenia regularnego - użyj czegoś takiego jak Html Agility Pack.

Jest zwinny parser HTML buduje odczytu/zapisu DOM i wspiera zwykły XPATH lub XSLT (faktycznie nie zrozumieć XPATH ani XSLT go używać, nie martw się. ..). Jest to biblioteka kodu .NET, która umożliwia analizowanie plików HTML "poza internetem". Analizator składni jest bardzo odporny na "zły, zniekształcony HTML". Model obiektu jest bardzo podobny do tego, co proponuje System.Xml, ale do dokumentów HTML (lub strumieni ).

Następnie można wyodrębnić body z XPATH.

+0

Zgadzam się. Użyłem tego i muszę powiedzieć, że jest szybki, czysty i czysty. –

0

To powinno cię całkiem blisko:

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

Proszę podać szczegółowe rozwiązanie. – ShaileshDev

11

Jak o czymś takim?

Przechwytuje wszystko pomiędzy znacznikami <body></body> (wielkość liter ma znaczenie z powodu RegexOptions.IgnoreCase) w grupie o nazwie theBody.

RegexOptions.Singleline pozwala nam obsługiwać wielowierszowy kod HTML jako pojedynczy ciąg.

Jeśli HTML nie zawiera tagów <body></body>, właściwość dopasowania Success będzie fałszywa.

 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 za czyste i zadbane rozwiązanie –

+0

Dziękujemy! Do tego dążę. – Darryl

+0

Świetnie, to dokładnie to, czego potrzebowałem. – Nadjib