2011-08-02 56 views
0

我需要在下面的示例中的「報告日期」之後過濾第一個日期時間或該行,即'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> 
+1

到目前爲止你有什麼?如果您對代碼執行的某個特定問題沒有像您期望的那樣工作,您會得到更好的答案。 – dahlbyk

回答

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; 
3

這是不是一個好主意,使用正則表達式來解析XML或HTML。這很複雜,並且已經有很多解析器爲您處理所有的細節。在C#中,您可以使用LINQ-to-XML作爲XML,使用HtmAgilityPack作爲HTML。

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中。如果只有一個字段需要捕獲,您可以跳過列表創建。

但是,像其他人一樣,你真的不應該明確地使用正則表達式來解決這個問題。

相關問題