6

我正在尝试检索 和 之间的所有文本<td></td>但我只得到我收藏中的第一个匹配项。我需要一个*或什么?这是我的代码。

string input = @"<tr class=""row0""><td>09/08/2013</td><td><a href=""/teams/nfl/new-england-patriots/results"">New England Patriots</a></td><td><a href=""/boxscore/2013090803"">L, 23-21</a></td><td align=""center"">0-1-0</td><td align=""right"">65,519</td></tr>";

string pattern = @"(?<=<td>)[^>]*(?=</td>)";
MatchCollection matches = Regex.Matches(input, pattern);
foreach (Match match in matches)
{
    try
    {
        listBoxControl1.Items.Add(matches.ToString());
    }
    catch { }
}
4

3 回答 3

9

使用以下正则表达式:

string input = "<tr class=\"row0\"><td>09/08/2013</td><td><a href=\"/teams/nfl/new-england-patriots/results\">New England Patriots</a></td><td><a href=\"/boxscore/2013090803\">L, 23-21</a></td><td align=\"center\">0-1-0</td><td align=\"right\">65,519</td></tr>";

string pattern = "(<td>)(?<td_inner>.*?)(</td>)";

MatchCollection matches = Regex.Matches(input, pattern);

foreach (Match match in matches) {
    try {
        Console.WriteLine(match.Groups["td_inner"].Value);
    }
    catch { }
}
于 2013-09-15T15:51:41.503 回答
4

HTML(XHTML 除外)并不严格,即在某些情况下

  • 你可以有没有结束标签的标签。
  • 你可以有嵌套标签..

正则表达式不适合解析这种复杂的语法。你需要使用解析器..

使用htmlagilitypack解析器

您可以使用此代码来检索它HtmlAgilityPack

HtmlDocument doc = new HtmlDocument();
doc.Load(yourStream);

var tdList = doc.DocumentNode.SelectNodes("//td")
                  .Select(p => p.InnerText)
                  .ToList();
于 2013-09-15T15:43:07.920 回答
0

我在这里找到了 Nicolas Durand 的解决方案http://geekcoder.org/js-extract-hashtags-from-text/ - 它似乎工作得很好:

#[^ :\n\t\.,\?\/’'!]+

最好的问候,菲尔

于 2016-10-21T14:03:14.403 回答