1

私はこのようなhtml文字列を持っています(yahoo xml description要素)

<img src="http://l.yimg.com/a/i/us/we/52/26.gif"/><br /> 
<b>Current Conditions:</b><br /> Cloudy, 1 C<BR /> <BR />
<b>Forecast:</b><BR /> Mon - Snow. High: -5 Low: -14<br /> Tue - Light Snow. High: -8 Low: -16<br /> <br /> 
....

HighとLowの値のみを取得したい(上記の例:-5、-14、-8、-16)

私は次のようにhtmlAgilityPackを取得しようとします:

HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(rssDescriptionElement);
List<string> elements = new List<string>();

foreach (HtmlNode element in htmlDoc.DocumentNode.SelectNodes("//br"))
{
    elements.Add(element.NextSibling.InnerText);
}

elements上記のhtmlStringの出力を一覧表示します。

"\n"
"\nCloudy, 1 C"
"\n"
"Forecast:"
"\nMon - Snow. High: -5 Low: -14"
"\nTue - Light Snow. High: -8 Low: -16"
"\n"
"\n"
""
"\n(provided by "
"\n"

このリストまたは別の別の解決策から、高い値と低い値(-5、-14、-8、-16)のみを取得するにはどうすればよいですか?

4

1 に答える 1

1

正規表現を使用する:

(?:High|Low)\s*:\s*(?<num>-?\d+)

。という名前のグループを取得しnumます。サンプルコード:

List<string> elements = new List<string>();
var pattern = @"(?:High|Low)\s*:\s*(?<num>-?\d+)";

foreach (HtmlNode element in htmlDoc.DocumentNode.SelectNodes("//br"))
{
    foreach(Match mc in Regex.Matches(element.NextSibling.InnerText, pattern))
    {
        elements.Add(mc.Groups["num"].ToString());
    }
}
于 2013-01-08T08:10:45.070 に答える