我尝试检索<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 { }
}
答案 0 :(得分:6)
使用以下正则表达式:
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 { }
}
答案 1 :(得分:4)
HTML(XHTML除外)并不严格,在某些情况下
regex不适合解析这种复杂的语法。你需要使用解析器..
使用htmlagilitypack解析器
您可以使用此代码使用HtmlAgilityPack
HtmlDocument doc = new HtmlDocument();
doc.Load(yourStream);
var tdList = doc.DocumentNode.SelectNodes("//td")
.Select(p => p.InnerText)
.ToList();
答案 2 :(得分:0)
我在Nicolas Durand找到了http://geekcoder.org/js-extract-hashtags-from-text/的解决方案 - 它看起来效果很好:
#[^ :\n\t\.,\?\/’'!]+
祝你好运, 菲尔