C#裡面的Regex的一個技巧

來源:互聯網
上載者:User

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都用到了.而且都很方便地擷取到了自己想要的結果.而且這兩種方法還真是不可不學啊.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.