2009-06-11 9 views
5

Comment utiliser Regex pour extraire le corps d'un document html, en tenant compte du fait que les balises html et body peuvent être en majuscules, en minuscules ou peuvent ne pas exister?Extrait Regex html Corps

+5

Duplicata de http://stackoverflow.com/questions/356340/expression-normale-pour-extraire-html-body-content? – M4N

Répondre

9

N'utilisez pas une expression régulière pour cela - utilisez quelque chose comme Html Agility Pack.

Ceci est un analyseur HTML agile qui builds une lecture/écriture DOM et prend en charge XPATH plaine ou XSLT (vous avez réellement n'avez pas à comprendre XPATH ni XSLT pour l'utiliser, ne vous inquiétez pas. ..). C'est une bibliothèque de code .NET qui vous permet d'analyser les fichiers HTML "hors du web". L'analyseur syntaxique est très tolérant avec le code malformé "réel ". L'objet est très similaire à System.Xml, mais pour les documents HTML (ou streams).

Ensuite, vous pouvez extraire le body avec un XPATH.

+0

Je suis d'accord. Je l'ai utilisé et je dois dire que c'est rapide, propre et net. –

0

Cela devrait vous être assez près:

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

Veuillez fournir une solution détaillée. – ShaileshDev

11

Que diriez-vous quelque chose comme ça?

Il capture tout ce qui se trouve entre <body></body> étiquettes (insensible à la casse en raison de RegexOptions.IgnoreCase) dans un groupe nommé theBody.

RegexOptions.Singleline nous permet de gérer plusieurs lignes HTML en une seule chaîne.

Si le code HTML ne contient pas de balises <body></body>, la propriété Success sera fausse.

 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 pour une solution propre et soignée –

+0

Merci! C'est ce que je cherche. – Darryl

+0

Super, ça fait exactement ce dont j'avais besoin. – Nadjib