2012-04-16 7 views
0

私は以下の正規表現を見つけようとしています。誰かが私に助言することはできますか?私はあるhtmlStringを持っている一言で言えば正規表現を使用してすべての画像とHTMLを抽出する

 htmlString = "<HTML><HEAD></HEAD><BODY>Here are some images.</br>1) <IMG style='MARGIN-BOTTOM: 20px; MARGIN-LEFT: 20px' align=right src='images/sample001.jpg'>2) <IMG style='MARGIN-BOTTOM: 25px; MARGIN-LEFT: 25px' align=right src='images/sample002.png'></br> And some docs as well.</br>1) href='javascript:parent.POPUP({url:'testDoc001.htm',type:'shared',width:600,height:645})'></br>2) href='javascript:parent.POPUP({url:'testDoc002.html',type:'shared',width:700,height:712})'></br></BODY></HTML>"; 

私はC#の、WPFで、次のルーチンを介してこれを実行します。


private static List<string> ExtractData(string htmlString) 
    { 
     List<string> data = new List<string>(); 

     //*** Get The Images *** 
     string pattern = @"<img .* src='(.+\.(jpg|bmp|png))'"; 

     Regex rgx = new Regex(pattern, RegexOptions.IgnoreCase); 
     MatchCollection matches = rgx.Matches(htmlString); 

     for (int i = 0, l = matches.Count; i < l; i++) 
     { 
      data.Add(matches[i].Value); 
     } 

     //*** Get Html Pages *** 
     pattern = @"url:'([^']*)'"; 

     rgx = new Regex(pattern, RegexOptions.IgnoreCase); 
     matches = rgx.Matches(htmlString); 

     for (int i = 0, l = matches.Count; i < l; i++) 
     { 
      data.Add(matches[i].Value); 
     } 

     return data; 
    }-------------------------------------------------------------------------------------- 

と私が得る結果は次のとおりです。

[0] = "< IMG style = 'MARGIN-BOTTOM:20px; MARGIN-LEFT:20px' align = right src = 'images/sam ple001.jpg '> 2)< IMG style =' MARGIN-BOTTOM:25px; MARGIN-LEFT:25ピクセル 'ALIGN =右SRC = '画像/ sample002.png "'

[1] = "URL: 'testDoc001.htm"'

[2] =" URL:' testDoc002。 HTMLは「」

私が本当に欲しいのです:

[0] = "画像/ sample001.jpg"

[1] = "画像/ sample002.png"

[2] = "testDoc001.htm"

[3] = "testDoc002.html"

正規表現で間違っていることを誰かに教えてもらえますか?

おかげ

+1

ここに最初の回答を参照してください:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – Cfreak

+1

何最初のものは、このようになりますあなたはおそらく正規表現を介して行うことができますが、それは期待どおりにきれいで整然としたではありません。あなたは実際にこれを行うためにパーサを使うべきです。 http://stackoverflow.com/a/1732454/355724 – VeeArr

+0

[C#で画像のSRCを取得するための正規表現]の重複可能性(http://stackoverflow.com/questions/4257359/regular-expression-to-get- c-sharp-in-c-sharp画像のsrc) –

答えて

1

方が良いような作業のためHTML Agility Packを使用すると思います。他の人が述べたように、HTMLを解析するための正規表現は、非常に特殊な場合のほかに、baaaadのことです。とにかく、正規表現にはいくつかの問題があります。

<img.+?src\s*=\s*\'(.*?\.(jpg|bmp|png))' 
関連する問題