一道练习题引申出来的知识点(二) 正则表达式
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 所以会没有颜色 希望大家见谅)
所谓正则表达式 就是在程序中需要判断或匹配某个字符串时用的一个表达式
比如说 判断用户输入的是否是一个正确的身份证号、判断是否是一个有效的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 所以会没有颜色 希望大家见谅)
相关文章推荐
- 一道练习题引申出来的知识点(一) 文件以及文件流的操作
- 一道练习题引申出来的知识点(三) 集合/泛型集合
- 一道练习题引申出来的知识点(四) 随机函数 / 字符串处理函数
- 一道练习题引申出来的知识点(五) 常用的sql语句 以及相关概念
- 一道练习题引申出来的知识点(六) ADO.NET常用命令 以及相关概念
- 由字符串反转(使用递归)引申出来一道Java面试题
- 由字符串反转(使用递归)引申出来一道Java面试题
- 由字符串反转(使用递归)引申出来一道Java面试题
- JSON 是 JavaScript 原生格式 以及引申出来的思考
- [练习题] 一道变态的面试题(吐槽啊吐槽)
- 全球顶尖公司的烧脑面试题,普通人一道都答不出来!
- 即兴知识点-1 (读取文件夹中的所有文件,判断文件类型个数,用到正则表达式判断)
- Python正则表达式练习题
- 一道不知道哪儿的练习题
- 正则表达式知识点总结
- ZOJ 1312 题解这是一道简单题但容易出错,不需要使用任和算法就可做出来,而且很快。我的AC 0ms
- 一道关于简单界面设计的练习题
- SAT数学:练习题一道
- 一道破解练习题
- Ajax和json一道基本的练习题