2009-06-11 12 views
5

htmlとbodyタグが大文字、小文字、または存在しない可能性があるので、 のhtmlドキュメントから本文を抽出するにはどうすればよいでしょうか?Regex Extract html Body

+5

重複したhttp://stackoverflow.com/questions/356340/regular-expression-to-extract-html-body-content? – M4N

答えて

9

正規表現を使用しないでください。Html Agility Packなどを使用してください。

これは はDOMを書き込み/読み取りを構築し、 平野XPATHやXSLTをサポートしている機敏なHTMLパーサである(あなたが実際に XPATHもそれを使用する XSLTを理解する必要はありませんが、心配しないでください。 ..)。 "Webから" HTMLファイルを解析するための.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を1つの文字列として扱うことができます。

HTMLに<body></body>タグが含まれていない場合、一致のSuccessプロパティはfalseになります。

 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