C#裡面的Regex的一個技巧
前幾天由於某個項目中要用到Regex來從網頁代碼中擷取字串.在使用過程中,碰到一些問題.不過最終解決了.現在記下來,以供自己或你
在以後參考.
銘謝CSDN中幫我解決問題的nstorm(網の風)和senkiner(金龍) .
現在的問題是從以下一段字串中取出其中的25,也就是取TD之間的值.
<td width="17" height="12" bgcolor="#FF0000">25</td>
使用Regex,方法有二:
第一,在微軟網站上面有相關介紹,不過只是提了一下,沒有詳細介紹.
相關網址:http://www.microsoft.com/china/msdn/library/webservices/asp.net/regexnet.mspx
在最下面的進階主題中的"命名組"和"四向處理",本例呢,就是使用其中的四向處理了.
具體我的方法如下:
string strTemp = "<td width=\"17\" height=\"12\" bgcolor=\"#FF0000\">25</td>";
Regex regInt = new Regex("(?<=>)\\d+(?=<)",RegexOptions.IgnoreCase);
MatchCollection matchsInt = regInt.Matches( strTemp );
MessageBox.Show ( matchsInt[0].Value );
第二,那就是上面所提到的"命名組"的使用方法了.其實在JS的Regex中也有相同功能的方法.只不過我對其不是太熟悉了.並且這是在C#中,
所以使用這個方法,還是蠻費了一翻周折的了.
Regex reg;
string pattern;
Match m;
string TDValue;
string str=@"<td width=34>564</td>";
pattern = @"^<td [^>]+>(?<TDValue>\td+)<[^>]+>$";
reg = new Regex(pattern,RegexOptions.IgnoreCase);
if(reg.IsMatch(str))
{
m = reg.Matches(str)[0];
TDValue=m.Groups["TDValue"].Value;
MessageBox.Show( TDValue );
}
這兩種方法雖然都是Regex取出的結果,但思路卻是完全不同的.
第一種的圓括弧是條件,也就是說圓括弧的內容是必需的條件,而要取的真正的結果是括弧之外的.
第二種的圓括弧是值,也就是說圓括弧的內容是取出來的值,而之外的是條件.其實就是分組了.?<XXX>這個運算式表示的是以?前面的這一組圓括弧為界劃為一組,組名為<>內的是組名.而在結果中,可以以組名取值而擷取結果.
看看,這一個例子,微軟進階Regex都用到了.而且都很方便地擷取到了自己想要的結果.而且這兩種方法還真是不可不學啊.