我需要在下面的示例中过滤“报告日期”('25 / 01/2011 2:23 AM')之后的第一个日期时间或那一行。任何人都可以帮忙??
<td colspan="2">
<table cellpadding="0" cellspacing="0" lang="en-AU">
<tr>
<td class="a31" style="WIDTH:39.50mm;word-wrap:break-word;HEIGHT:4.00mm;">Report Date</td>
</tr>
</table>
</td>
<td colspan="2">
<table cellpadding="0" cellspacing="0" lang="en-AU">
<tr>
<td class="a10" style="WIDTH:48.00mm;word-wrap:break-word;HEIGHT:4.00mm;">25/01/2011 2:23 AM</td>
</tr>
</table>
</td>
<td colspan="11">
</td>
答案 0 :(得分:3)
使用正则表达式解析XML或HTML不是一个好主意。它很复杂,已经有很多解析器可以为您处理所有细节。在C#中,您可以使用LINQ-to-XML表示XML,使用HtmAgilityPack表示HTML。
答案 1 :(得分:0)
只需使用Html Agility Pack即可。使用RegEx来处理这个特殊情况可能可以工作,但长期不能真正维护。
对于您的示例,这将起作用:
HtmlDocument doc = new HtmlDocument();
doc.Load("test.html"); // path to your HTML file
var node = doc.DocumentNode.SelectSingleNode("//td[@class='a10']");
string myDateString = node.InnerText;
答案 2 :(得分:0)
如果你真的必须使用正则表达式(因为你问过......):
Regex exp = new Regex(@"class="a10".*>(\d+/\d+/\d+\s\d+:\d+\sAM)");
MatchCollection MatchList = exp.Matches(InputText);
Match FirstMatch = MatchList[0];
这将获取所有匹配项,并将它们存储在MatchList中。第一个(仅限于此情况)结果存储在FirstMatch中。如果您只需要捕获一个字段,则可以跳过列表创建。
然而,正如其他人所说,你真的不应该明确地使用正则表达式解决这个问题。