如何捕捉某个字符串后的第一个模式

本文关键字:第一个 模式 字符串 何捕捉 | 更新日期: 2023-09-27 18:04:18

我需要过滤第一个日期时间或"报告日期"之后的行,即下面示例中的"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>

如何捕捉某个字符串后的第一个模式

使用正则表达式解析XML或HTML不是一个好主意。它很复杂,而且已经有很多解析器为您处理所有细节。在c#中,你可以使用LINQ-to-XML来处理XML,使用HtmAgilityPack来处理HTML。

直接使用Html敏捷包吧。对于这种特殊情况使用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;

如果您确实必须使用regex(因为您要求…):

Regex exp = new Regex(@"class="a10".*>('d+/'d+/'d+'s'd+:'d+'sAM)");
MatchCollection MatchList = exp.Matches(InputText);
Match FirstMatch = MatchList[0];

获取所有匹配项,并将它们存储在MatchList中。第一个(也是唯一的)结果存储在FirstMatch中。如果只需要捕获一个字段,则可以跳过列表创建。

然而,就像其他人所说的,你真的不应该显式地使用正则表达式来解决这个问题。