1

私はコードを持っています`

string tag = "div";
string pattern = string.Format(@"\<{0}.*?\>(?<tegData>.+?)\<\/{0}\>", tag.Trim());
Regex regex = new Regex(pattern, RegexOptions.ExplicitCapture);
MatchCollection matches = regex.Matches(data);

`

<div class="in"> .... </div>タグ間のコンテンツを取得する必要があります

   <div class="in">
        <a href="/a/show/7184569" class="mm">ВАЗ 2121</a> <span class="for">за</span>    <span class="price">2 700 $</span></span><br/><span class="year">1990 г.</span><br/><div style="margin: 3px 0 3px 0">1.6 л, бензин, КПП механика, с пробегом, белый, литые диски, тонировка, спойлер, ветровики, противотуманки, Движок после капитального ремонта!</div><div>
     <span style="display:block; padding: 4px 0 0 0;"><span class="region">Костанай</span><span class="adv-phones">, +7 (777) 4464451</span></span>

            <small class="gray air">24 просмотра</small>


            <small class="gray air">13 июня</small>
    </div>
    <div class="selectItem" title="Выбрать" id="fv_sic_7184569">
        <a href="#" class="fav-button" id="fav_7184569">&nbsp;</a>           </div>
</div>

どうすればいいですか?コードが機能しません。

4

4 に答える 4

4

単純なdivタグを抽出する可能性のある正規表現は次のとおりです。

// <div[^>]*>(.+?)</div>

string tag = "div";
string pattern = string.Format(@"<{0}[^>]*>(?<tegData>.+?)</{0}>", tag.Trim());

ただし、HTML解析にRegExを使用することはほとんどの場合不適切であり、正しく機能しないことが保証されています。これは、HTMLなどのマークアップ言語が正規言語ではないためです。

そうは言っても、XMLパーサーを使用してドキュメントまたはフラグメントを解析し、必要なものを抽出する方がはるかに良いでしょう。実際、転送専用パーサーを使用すると、RegExを使用するよりもおそらく高速になります。

.NETのXmlReaderクラスを確認する必要があります。

于 2012-06-13T15:01:50.273 に答える
1

サーバー側である必要がない場合は、JavaScript を使用してこれを実現できます。そのような:

 <script language="javascript">
     function getData(){
          var divs = document.getElementByTagName('div');
          var data;
          var x;
          for(x = 0; x < divs.length; x++)
          {
            if(divs[x].className == 'in') 
            {
                data = divs[x].innerHTML;
            }
          }
     }
 </script>
于 2012-06-13T15:32:55.793 に答える
0

ネストされたタグを取得するには、次の関数を使用してみてください。

public static MatchCollection ParseTag(string str, string tagpat, string argpat, string valpat) {
    if (null == tagpat) argpat = @"\w+";
    if (null == argpat) argpat = @"[^>]*";
    if (null == valpat) valpat = @"(?><\k'tag'\b[^>]*>(?'nst')|</\k'tag'>(?'-nst')|.?)*?(?(nst)(?!))";
    return Regex.Matches(str, @"(?><(?'tag'" + tagpat + @"\b)\s*(?'arg'" + argpat + @")>)(?'val'" + valpat + @")</\k'tag'>",
        RegexOptions.IgnoreCase | RegexOptions.Singleline);
}

パラメータは、ターゲット タグをフィルタリングするための単純な正規表現です。以下に例を示します。

ParseTag(page, "div", @"id=""content""\s+class=""mw-body""", null);
ParseTag(wikipage, "span", @"class=""bday""", @"\d{4}-\d{2}-\d{2}");

このバリアントは、開始タグと終了タグ、および同じタイプのネストされたタグを処理します (他のネストされたタグは壊れて無視される可能性があります)。

もう 1 つのバリアントは、ネストされたタグをより厳密にチェックし、それらの一部が誤って開いたり閉じたりしている場合は一致しません。

if (null == valpat) valpat = @"(?><(?'itag'\w+)\b[^>]*>(?'nst')|</\k'itag'>(?'-nst')|.?)*?(?(nst)(?!))";
于 2012-06-14T15:35:27.447 に答える