您的位置:首页 > 其它

一道练习题引申出来的知识点(二) 正则表达式

2012-06-11 00:18 295 查看
什么是正则表达式:(个人理解 没有百度 高手勿拍)

所谓正则表达式 就是在程序中需要判断或匹配某个字符串时用的一个表达式

比如说 判断用户输入的是否是一个正确的身份证号、判断是否是一个有效的URl连接等

总之 他的功能非常的强大 只有想不到 没有配不到

先说一下那道题中我是怎么匹配的

先说百家姓 匹配百家姓非常的简单 在txt中 百家姓是的格式是 (赵)、(钱)、(孙)、(李)...

每一个姓氏都用()括起来 我用的正则是 \((\w)\)

下面来分析一下 (非常非常的简单)

\(:代表左括号

\) :代表右尖括号

(\w):代表中间的姓氏:

好了 那道题中的正则表达式就说怎么说 还是上笔记

判断是否匹配

string regex = @"[\u4e00-\u9fa5]+"; // 要匹配的正则 此处是匹配汉字

string str = Console.ReadLine();

while (true)

{

if (Regex.IsMatch(str, regex)) // 判断是否匹配

{

Console.WriteLine("字符串匹配");

}

else

{

Console.WriteLine("不匹配");

}

str = Console.ReadLine();

}

捕获单个字符串

string str = @"大家好呀,hello, 20101010年10月10日是个好日子。恩,9494.吼吼!886";

string regex = @"\d+"; // 匹配数字正则

Match m = Regex.Match(str, regex); // 捕获单个字符

if (m.Success) // 判断是否捕获成功

{

Console.WriteLine(m.Value); // 捕获第一个数字的值

Console.WriteLine(m.Index); // 捕获第一个数字的开始位置

Console.WriteLine(m.Length); // 捕获第一个数字的长度

}

捕获多个字符串

string str = @"大家好呀,hello, 20101010年10月10日是个好日子。恩,9494.吼吼!886";

string regex = @"\d+"; // 匹配数字正则

MatchCollection ms = Regex.Matches(str, regex); // 循环匹配多个字符串

foreach (Match m in ms) // 循环匹配多个字符串

{

Console.WriteLine(m.Value);

Console.WriteLine(m.Index);

Console.WriteLine(m.Length);

}

获取网页中的HTML代码 using System.Net;

WebClient wc = new WebClient(); // 提取网页上html代码

wc.Encoding = Encoding.Default; // 设定编码格式

string html = wc.DownloadString("http://www.baidu.com/"); // 将网页的html代码放在html字符串中

字符串的分组

string str = @"

姓名:张三,性别:男,年龄:20;

姓名:王五,性别:女,年龄:19";

string temp = "@name='{0}',gender='{1}',age='{2}'";

string regex = @"姓名:(\w+),性别:([男女]),年龄:(\d+)";

MatchCollection mc = Regex.Matches(str, regex);

foreach (Match m in mc) // 开始分组

{

Console.WriteLine(string.Format(temp,m.Groups[1],m.Groups[2],m.Groups[3]));

}

字符集合之间的大小关系

MatchCollection

Match

Group

Captrue

贪婪模式与非贪婪模式(给+,*设定范围) ?

string str = @"<p>第一自然段</p><p>第二自然段</p>";

string regex = @"<p>(.+)</p>"; // 贪婪模式 得到一个值 <p>第一自然段</p><p>第二自然段</p>

string regex = @"<p>(.+?)</p>"; // 非贪婪模式 得到两个值 <p>第一自然段</p> 和 <p>第二自然段</p>

正则表达式的替换分组 Replace $1,$2

// 输出代密码的邮箱地址

string emile=@"fdsfdfdg@123.com";

string regex=@"(\w{2})(\w+)(@\w+)";

string s = Regex.Replace(emile,regex,"$1****$3");

// 输出2012/6/1

string str = "2012年6月1日";

string regex = @"(\d+)年(\d+)月(\d+)日";

string s = Regex.Replace(str, regex, "$1/$2/$3");

关于正则就说这么多 以上我自己总结的一些常用的方法以及各个用法的例子

更多的正则表达式网上全是 这里就不多少了 毕竟上面的才是我原创的

下一篇文章我会介绍 [b]泛型集合的使用

[/b]

(作者注释:由于我的笔记是.doc格式的 所有的标题都有超链接以及标题颜色 如果直接复制过来的话会有格式不支持的情况 为了统一 我在全部转换成了txt 所以会没有颜色 希望大家见谅)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: