2013-07-04 25 views
6

私は関連する質問をいくつか見てきましたが、試しましたが動作しません。 divのコンテンツをid「thumbs」に一致させたいと思います。しかしregex.Successは偽:(divの正規表現抽出コンテンツ

Match regex = Regex.Match(html, @"<div[^>]*id=""thumbs"">(.+?)</div>"); 
+8

けど*にコメントを愛するHTML敏捷性パック – Sayse

答えて

8

正規表現は

HTMLが厳密ではないもそれはそのフォーマットとの定期的な..ですHTMLファイルを解析するための良い選択ではない..です

使用を返しますhtmlagilitypack


なぜパーサを使うのか?

を考えてみましょうあなたのregex..Thereはあなたのコードを壊す可能性例無限の数

  • いくつかのdivが終了タグを持っていけない入れ子にのdiv
  • がある場合、あなたの正規表現は動作しません!(除くですXHTML)

あなたはHtmlAgilityPack

を使用して、それを取得するためにこのコードを使用することができます3210
HtmlDocument doc = new HtmlDocument(); 
doc.Load(yourStream); 

var itemList = doc.DocumentNode.SelectNodes("//div[@id='thumbs']")//this xpath selects all div with thubs id 
        .Select(p => p.InnerText) 
        .ToList(); 

//itemList now contain all the div tags content having its id as thumbs 
+0

の候補のように聞こえます不規則な*表現:) – Charleh

+0

私はそれを見て、ありがとう。 –

+0

@Charleh:D ..... – Anirudha

1

いいえ、私は彼がエスケープする必要はないと思います。彼はパターンの前に@を持っています。私はこれが正しいと思う:

<div[^>]*id="thumbs">(.+?)</div> 

のでノーダブル二重引用符

0

これを試してみてください:

Regex r = new Regex(@"(?<text>(<div\s*?id=(\""|&quot;|&\#34;)" 
    + @"thumb(\""|&quot;|&\#34;).*?>)(?>.*?</div>|.*?<div " 
    + @"(?>depth)|.*?</div> (?>-depth))*)(?(depth)(?!)).*?</div>", 
    RegexOptions.Singleline); 
トピックオフ一部
関連する問題