0

データ:

<tr>
<td>
<a href="somelink">
some. .data...
</a>
</td>
<td>Black</td>
<td>57234</td>
<td>5431.60</td>
<td><font class="down">  -125.02</font></td>
</tr><tr>
<td>
<a href="somelink">
some. .data...
</a>
</td>
<td>Blue</td>
<td>57234</td>
<td>5431.60</td>
<td><font class="up">  -125.02</font></td>
</tr><tr>
<td>
<a href="somelink">
some. .data...
</a>
</td>
<td>Brown</td>
<td>57234</td>
<td>5431.60</td>
<td><font class="down">  -125.02</font></td>
</tr>
...more data...

「いくつか」を抽出したい。。データ...'; '黒'; '57234'; '5431.60'; 一度に。【5番目tdのデータは不要です。】

当初、

<tr><td><a.*>([a-zA-Z0-9 -]+)</a></td><td>(\w+)</td><td>([\d]+\.\d+)</td><td>(\d+\.\d+)</td>

仕事をしていました。(ヒットアンドミスアプローチ経由)

しかし、今は壊れています。

ここで<td>(.*)</td>orを使用すると、すべての tr の<\w+>(.*)</\w+>最後の 4 秒からのデータが表示されます。tdしかし、なぜそれが表示されないの<a href...>...</a>ですか?どうすれば必要なデータを取得できますか?

4

2 に答える 2

6

一般に、正規表現は HTML を解析するための悪い方法です。

.NET 専用の HTML パーサーであるHTML Agility PackまたはCsQueryを検討することをお勧めします。

HTML Agility Pack は XPath と LINQ を使用してクエリでき、CsQuery は jQuery セレクターを使用します。

于 2013-01-20T18:37:43.310 に答える
1

実際の html パーサーを使用した場合、コードはよりシンプルで維持しやすくなります。

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);

var table = doc.DocumentNode.Descendants("tr")
           .Select(tr => tr.Descendants("td").Select(td => td.InnerText).ToList())
           .ToList();

あなたが提供したサンプルhtmlを考えると、上記のコードはそれぞれ5列を含む3行を返します。

于 2013-01-20T19:08:13.313 に答える