现在的位置: 首页 > 综合 > 正文

C#里面的正则表达式的一个技巧

2012年07月11日 ⁄ 综合 ⁄ 共 1211字 ⁄ 字号 评论关闭

C#里面的正则表达式的一个技巧

前几天由于某个项目中要用到正则表达式来从网页代码中获取字符串.在使用过程中,碰到一些问题.不过最终解决了.现在记下来,以供自己或你

在以后参考.

铭谢CSDN中帮我解决问题的nstorm(网の风)和senkiner(金龍) .

现在的问题是从以下一段字符串中取出其中的25,也就是取TD之间的值.

<td width="17" height="12" bgcolor="#FF0000">25</td>

使用正则表达式,方法有二:

第一,在微软网站上面有相关介绍,不过只是提了一下,没有详细介绍.
相关网址: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的正则表达式中也有相同功能的方法.只不过我对其不是太熟悉了.并且这是在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 );
}

这两种方法虽然都是正则表达式取出的结果,但思路却是完全不同的.

第一种的圆括号是条件,也就是说圆括号的内容是必需的条件,而要取的真正的结果是括号之外的.
第二种的圆括号是值,也就是说圆括号的内容是取出来的值,而之外的是条件.其实就是分组了.?<XXX>这个表达式表示的是以?前面的这一组圆括号为界划为一组,组名为<>内的是组名.而在结果中,可以以组名取值而获取结果.

看看,这一个例子,微软高级正则表达式都用到了.而且都很方便地获取到了自己想要的结果.而且这两种方法还真是不可不学啊.

抱歉!评论已关闭.