2009-06-11 3 views
5

Как использовать Regex для извлечения тела из html-документа, с учетом того, что теги html и body могут быть в верхнем, нижнем регистре или могут отсутствовать?Regex Extract html Body

+5

Дубликат http://stackoverflow.com/questions/356340/regular-expression-to-extract-html-body-content? – M4N

ответ

9

Не используйте для этого регулярное выражение - используйте что-то вроде Html Agility Pack.

Это проворный HTML парсер, который строит для чтения/записи DOM и поддерживает простой XPATH или XSLT (вы на самом деле не должны понимать XPATH ни XSLT, чтобы использовать его, не волнуйтесь. ..). Это библиотека .NET-кода, которая позволяет вам разобрать HTML-файлы «вне Интернета». Анализатор очень толерантен с «реальным миром». Объект модель очень похожа на то, что предлагает System.Xml, но для документов HTML (или потоков).

Затем вы можете извлечь body с помощью XPATH.

+0

Согласен. Я использовал это и должен сказать, что это быстро, аккуратно и чисто. –

0

Это должно получить вас довольно близко:

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

Просьба предоставить подробное решение. – ShaileshDev

11

Как о чем-то вроде этого?

Он записывает все между <body></body> тегами (без учета регистра в соответствии с RegexOptions.IgnoreCase) в группу с именем theBody.

RegexOptions.Singleline позволяет обрабатывать многострочный HTML как одну строку.

Если 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