字符串操作与正则表达式
Regex类
Regex 类表示不可变(只读)正则表达式类。它还包含各种静态方法,允许在不显式创建其他类的实例的情况下使用其他正则表达式类。Regex 类在System.Text.RegularExpressions命名空间下。 http://www.cnblogs.com/chixiaojin/archive/2011/09/12/2174149.html 匹配字符集
1、这里介绍IsMatch方法。
IsMatch方法:正则表达式在输入字符串中是否找到匹配项。
该方法有四种重载的形式:
public bool IsMatch(string str);
表示在构造函数中指定的正则表达式在str中是否找到匹配项。
public bool IsMatch(string str, int start);
表示在构造函数中指定的正则表达式在str的指定起始位置开始是否找到匹配项。参数start表示开始搜索的字符位置。
public static bool IsMatch(string str, string pattern);
表示使用pattern参数中指定的正则表达式是否在str中找到匹配项。
public static bool IsMatch(string str, string pattern, RegexOptions options);
表示使用pattern参数中指定的正则表达式和options枚举提供的匹配选项在input中是否找到匹配项。其中options是RegexOption枚举值的按位“或”组合。
Regex r = new Regex(@"[0-9a-z]{3,5}");string[] tests = {"abc", "123456", "(aa22bb33)", "ab"};foreach (string test in tests){if (r.IsMatch(test)){Console.WriteLine("{0}中有匹配的项", test);}else{Console.WriteLine("{0}中没有匹配的项", test);}}
2、Match方法
Match类表示单个正则表达式匹配操作的结果,得到的结果是只读的。该类没有公共构造函数,而是用Regex对象的Match方法返回的结果创建该类的对象。
Regex r = new Regex("abc");Match m = r.Match("123abc456");if (m.Success){ Console.WriteLine("找到匹配位置:" + m.Index);Console.WriteLine("找到匹配结果:" + m.Value);}
运行结果:
找到匹配位置:3
找到匹配结果:abc
3、MatchCollection类
MatchCollection类表示成功的非重叠匹配的序列,得到的集合是只读的。该类同样没有公共构造函数,而是用Regex.Matches方法返回的结果创建该类的对象。
Regex r = new Regex("abc");MatchCollection mc = r.Matches("123abc4abcd");int count = mc.Count;String[] results = new String[count];int[] matchPosition = new int[count];for (int i = 0; i < count; i++){results[i] = mc[i].Value;matchPosition[i] = mc[i].Index;Console.WriteLine("第{0}个匹配结果:{1},位置:{2}",i+1, results[i], matchPosition[i]);}
运行结果:
第1个匹配结果:abc,位置:3
第2个匹配结果:abc,位置:7
public string sb = "";protected void Page_Load(object sender, EventArgs e){sb = "123456;http://img999.taobaocdn.com/imgextra/i3/37466590/T2IqYnXXpaXXXXXXXX_!!37466590.jpg" width="750"></a></p><p><span style="font-size: 36.0px;"><span style="font-family: microsoft yahei;"><span style="color: #ff0000;"><a title="" href="http://item.taobao.com/item.htm?spm=686.1000925.1000774.6.2UW53Z&id=21196964907" target="_self"></a>预售2013年新款蕾丝打底衫超美,预计2013年2月底3月初发货,5折包邮首发 先买先发!</span></span></span></p><p><span style="font-size: 36.0px;color: #ff0000;font-family: microsoft yahei;">限量第一批500件109</span><span style="font-size: 36.0px;"><span style="font-family: microsoft yahei;"><span style="color: #ff0000;">元包邮!<span style="font-size: 36.0px;"><span style="font-family: microsoft yahei;"><span style="color: #ff0000;">限量第二批500件129元不包邮</span></span></span></span></span></span></p><p><img src="http://img04.taobaocdn.com/imgextra/i4/37466590/T2CFGVXgNbXXXXXXXX_!!37466590.jpg" align="absMiddle"><img src="http://img04.taobaocdn.com/imgextra/i4/37466590/T25Vm8XnBXXXXXXXXX_!!37466590.jpg" align="absMiddle"><img src="http://img01.taobaocdn.com/imgextra/i1/37466590/T2P_GsXidcXXXXXXXX_!!37466590.jpg" align="absMiddle"></p><p><img src="http://img02.taobaocdn.com/imgextra/i2/37466590/T2xCXdXotNXXXXXXXX_!!37466590.jpg" align="absMiddle"></p><p><img src="http://img01.taobaocdn.com/imgextra/i1/37466590/T2u2DwXcxXXXXXXXXX_!!37466590.jpg" align="absMiddle"><img src="http://img03.taobaocdn.com/imgextra/i3/37466590/T2hLnwXfpXXXXXXXXX_!!37466590.jpg" align="absMiddle"></p>";Regex r = new Regex("http://img" + "[0-9]{2}" + ".taobaocdn.com" + "[a-zA-Z0-9/_!]{40,60}" + ".jpg");MatchCollection mc = r.Matches(sb);int count = mc.Count;String[] results = new String[count];int[] matchPosition = new int[count];for (int i = 0; i < count; i++){results[i] = mc[i].Value;matchPosition[i] = mc[i].Index;Response.Write("第"+i+"个匹配结果:"+results[i]+",位置:"+matchPosition[i]+"</br>");}}
显示结果:
第0个匹配结果:http://img04.taobaocdn.com/imgextra/i4/37466590/T2CFGVXgNbXXXXXXXX_!!37466590.jpg,位置:1131
第1个匹配结果:http://img04.taobaocdn.com/imgextra/i4/37466590/T25Vm8XnBXXXXXXXXX_!!37466590.jpg,位置:1268
第2个匹配结果:http://img01.taobaocdn.com/imgextra/i1/37466590/T2P_GsXidcXXXXXXXX_!!37466590.jpg,位置:1405
第3个匹配结果:http://img02.taobaocdn.com/imgextra/i2/37466590/T2xCXdXotNXXXXXXXX_!!37466590.jpg,位置:1561
第4个匹配结果:http://img01.taobaocdn.com/imgextra/i1/37466590/T2u2DwXcxXXXXXXXXX_!!37466590.jpg,位置:1717
第5个匹配结果:http://img03.taobaocdn.com/imgextra/i3/37466590/T2hLnwXfpXXXXXXXXX_!!37466590.jpg,位置:1854
4、Group类
Group类表示单个捕获组的结果。当与正则表达式匹配的子字符串有多组时,可以使用该类得到某一组的结果。
string text = "One car red car blue car";string pat = @"(w+)s+(car)";Regex r = new Regex(pat, RegexOptions.IgnoreCase);Match m = r.Match(text);int matchCount = 0;while (m.Success){Console.WriteLine("Match" + (++matchCount));for (int i = 1; i <= 2; i++){Group g = m.Groups[i];Console.WriteLine(string.Format("Group{0}='{1}'", i, g));CaptureCollection cc = g.Captures;for (int j = 0; j < cc.Count; j++){Capture c = cc[j];Console.WriteLine(string.Format("Capture{0}='{1}', Position={2}", j, c, c.Index));}}m = m.NextMatch();}Console.ReadLine();
输出结果:
Match1
Group1='One'
Capture0='One', Position=0
Group2='car'
Capture0='car', Position=4
Match2
Group1='red'
Capture0='red', Position=8
Group2='car'
Capture0='car', Position=12
Match3
Group1='blue'
Capture0='blue', Position=16
Group2='car'
Capture0='car', Position=21
转载于:https://www.cnblogs.com/chixiaojin/archive/2013/03/24/2979528.html
字符串操作与正则表达式相关推荐
- PHP学习:字符串操作和正则表达式
主要内容: 字符串格式化: 用字符串函数连接和分隔字符串: 字符串比较: 使用字符串函数匹配和替换子字符串: 使用正则表达式: 字符串格式化 1,去空格:trim(),ltrim(),rtrim() ...
- 字符串操作-正则表达式
正则表达式 编辑 正则表达式,又称 正规表示法. 常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式使用单个字符 ...
- 正则表达式与字符串操作
基本语法 exec()函数用于检索字符串中的正则表达式的匹配 如果字符串中有匹配的值,则返回该匹配值,否则返回null RegExpobject.exec (string) 示例代码如下: <! ...
- js函数语法:ASCII 码的相互转换,字符串操作,数学计算
ASCII 码的相互转换 for (let i = 'a'.charCodeAt(); i <= 'z'.charCodeAt(); i++) {a.push(String.fromCharCo ...
- linux shell 字符串操作(长度,查找,替换)详解
引用 参考 http://www.cnblogs.com/chengmo/archive/2010/10/02/1841355.html 在做shell批处理程序时候,经常会涉及到字符串相关操作.有 ...
- shell之字符串操作
在使用脚本的时候,字符串是我们经常用的对象,还经常会用到查找,替换,删减,比较等等操作.本人稍作整理,希望能对新人有所帮助,本人也是新人,(*^__^*) 嘻嘻-- 1.判断字符串的属性 一般用到的也 ...
- JavaScript中的字符串操作(转)
http://www.cnblogs.com/xuebin/articles/1296837.html 最近编一个javascript的翻译程序,发现无法正确比较两个字符串的相等,上网查了查,发现这篇 ...
- 【备忘】linux shell 字符串操作(长度,查找,替换,匹配)详解
为什么80%的码农都做不了架构师?>>> 在做shell批处理程序时候,经常会涉及到字符串相关操作.有很多命令语句,如:awk,sed都可以做字符串各种操作. 其实shell内 ...
- shell 字符串操作(长度,查找,替换)详解
#################################################### 工作中字符串操作举例 #################################### ...
最新文章
- SpringCloud(第一部分)
- tidb数据库_异构数据库复制到TiDB
- 原创 | 万万没想到,JVM内存结构的面试题可以问的这么难?
- 逻辑回归(LR)个人学习总结篇
- javascript 时间类型 Date
- Does Your Wooden Surface Really Need Sealing?
- Hive学习之Metastore及其配置管理
- floodlight路由机制分析
- TestBench 基本写法与框架
- 政府、事业单位短信通知解决方案
- 最新-安装Windows与Ubuntu双系统
- TPS的几种计算方式
- 插入mysql数据库时间相差14个小时
- Postgresql中,计算两个日期月份差值或年月日,实现Oracle中months_between、add_months的效果
- 单词底部有波浪线,提示typo in word时
- myeclipse编辑jsp页面时光标乱跳
- 年轻人,看你骨骼惊奇,我这有一份来自阿里的Android开发学习指南,不仅能让你月入5w,度过中年危机都不是问题!
- 原生混合云 — 经政企打磨方能赢得政企信任
- 计算机网络与电竞的论文,谈谈电子竞技毕业论文.doc
- 爬虫入门(五)抓取网页数据
热门文章
- Python 常用文件
- 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 J Beautiful Numbers
- 转:SLAM算法解析:抓住视觉SLAM难点,了解技术发展大趋势
- centos安装JDK与Tomcat
- 使用sui实现的选择控件【性别、日期、省市级联】
- oracle 多条执行语句同时执行
- fdisk -l 找不到分区怎么办?想办法找到隐藏分区。
- ActivityIndicator(菊花)的用法
- 声明了变量并赋了初始值,但在VS中报当前上下文中不存在名称“ XXX”的错误...
- Java中Synchronized的用法