2015.3.12Arinc424 Tools中SiniArincCls.csParserFile(string sFile)函数正则表达式理解
原文:
string RegEx1 = @"(\[ITEM\]\s*=[\S\s]*?(?=\[ITEM\])|\[ITEM\]\s*=[\S\s]*)";//用来识别主记录和后续记录,并完成分组
解释
1.该表达式首尾的()没具体含义,可以去掉(不完全是,见后面解释)
2.该表达式是一个2重选择结构,以|分开
3. 第1部分:\[ITEM\]\s*=[\S\s]*?(?=\[ITEM\]) 最后有个(?=)结构,表示零宽前向断言,该句中表示截止到[ITEM]开始位置;[\S\s]*结构表示任何字符可以出现不限次,加上?表示懒惰模式,匹配最短的任何字符,结果就一个多余字符也不匹配了,只匹配[ITEM\] =
4.第2部分\[ITEM\]\s*=[\S\s]*与第一部分开头一样,表示或者匹配'[ITEM\]='开始的任何部分,注意*号后面没有?表示=后可以跟无限多字符直到结束
整条语句的含义是以'[ITEM]='分割匹配,前面各次匹配'[ITEM]=XXXXXX'[ITEM]''结构(不包括结尾的[ITEM]),最后一次匹配'[ITEM]='结构
Regex reg = new Regex(@"[\w\W]*\n");
string input = @"3
4
5";
Match mc1 = reg.Match(input); 这样匹配出的结果只有一条 3\r\n4\r\n
如果将条件改为Regex reg = new Regex(@"[\w\W]*?\n"); //*后面加一个?表示懒惰模式,尽量少地匹配
匹配结果会有两条'3\r\n'和'4\r\n'
加深对*?懒惰模式的理解不加?表示贪婪模式,尽量多地匹配即使已经满足条件了3后面\n仍然往后寻找,直到最大程度满足条件。而懒惰模式只要一满足条件立即终止寻找。而且贪婪模式并不局限于一个*所有该范围内的*都将采用懒惰模式
Regex reg = new Regex(@"[123]b");
string input = @"321ba4b5";
此时匹配结果是1b,跟想象一样但
如果将条件改为"[123]*b" 则结果为321b。跟想象中不一样
这说明[]*的*可以取[]中的任何字符来重复,而不局限于某个字符重复
(?<==)[\w\W]*?(?=\r\n) 一个=的后向定位加一个\r\n的前向定位 表示=和回车之间的字符,不包括=或回车
()在分组的作用
Regex reg = new Regex(@"(1)(2)(3)"); 和Regex reg = new Regex(@"123"); 的区别
string input = @"a123b";
Match mc1 = reg.Match(input);
string res = mc1.ToString();
上述两种写法反应在res上都一样都是123
但是mc1.Groups.count不一样
前者数量为4,后者为1
前者4个Group取值分别为 123,1,2,3
后者1个Group取值为123
说明在匹配条件中加()可以对匹配结果进行分组
而Regex reg = new Regex(@"(123)");
Group结果为2,两个Group取值一样都是123
Regex reg = new Regex(@"(1)2(3)");
Group结果为3,分别是123,1,3
说明分组的数量是()对数量+1
//一句话实现字符串过滤数字或非数字
string ts = "sdf33sdf43sdf334";
string sz=new Regex("[^0-9]").Replace(ts,""); //只保留数字
string zm=new Regex("[0-9]").Replace(ts,""); //只保留非数字
string wei = new Regex(@"^\d{6}.*\d*N").Match("321564N1254784.34E").ToString();
string jin = new Regex(@"N\d{7}.*\d*E$").Match("321564N1254783.34E").ToString();
2015.3.12Arinc424 Tools中SiniArincCls.csParserFile(string sFile)函数正则表达式理解的更多相关文章
- Python中网络编程对 listen 函数的理解
listen函数的第一个参数时SOCKET类型的,该函数的作用是在这个SOCKET句柄上建立监听,至于有没有客户端连接进来,就需要accept函数去进行检查了,accept函数的第一个参数也是SOCK ...
- Java中如何将String转成Date
Java中如何将String转成Date 最近在开发Json数据反序列化为Java对象的时候发现spring mvc 和 Jackson 对Date类型对支持不是特别好,虽然在Java对象序列化为Js ...
- java中特殊的String类型
Java中String是一个特殊的包装类数据有两种创建形式: String s = "abc"; String s = new String("abc"); 第 ...
- C# 中怎么将string转换成int型
int intA = 0;1.intA =int.Parse(str);2.int.TryParse(str, out intA);3.intA = Convert.ToInt32(str);以上都可 ...
- c#中 uint--byte[]--char[]--string相互转换汇总
原文:c#中 uint--byte[]--char[]--string相互转换汇总 在在做一些互操作的时候往往需要一些类型的相互转换,比如用c#访问win32api的时候往往需要向api中传入DWOR ...
- 用eclipes 添加jboss tools中的hibernate tool进行反向工程生成数据库对应的BOJO(Javabean)
用eclipes 添加jboss tools中的hibernate tool进行反向工程生成数据库对应的BOJO(Javabean) 安装: 在help中eclise marksplace中查询JBo ...
- java中string.trim()函数的使用
java中string.trim()函数的的作用是去掉字符串开头和结尾的空格,防止不必要的空格导致的错误. public static void main(String arg[]){ String ...
- C++中int与string的转化
C++中int与string的转化 int本身也要用一串字符表示,前后没有双引号,告诉编译器把它当作一个数解释.缺省情况下,是当成10进制(dec)来解释,如果想用8进制,16进制,怎么办?加上前缀, ...
- java和js中int和String相互转换常用方法整理
java中int和String的相互转换常用的几种方法: int > String int i=10;String s="";第一种方法:s=i+""; ...
随机推荐
- 基于Spring mvc 的Websocket 开发
1.Pom.xml <dependency> <groupId>org.springframework</groupId> <artifactId>sp ...
- hadoop 指定 key value分隔符
原文:http://wingmzy.iteye.com/blog/1260570 hadoop中的map-reduce是处理<key,value>这样的键值对,故指定<key,val ...
- java应用线上CPU过高问题排查
1.top 命令,查看占用CPU最高的PID.ps aux|grep PID 进一步确定tomcat进程出现问题.2.ps -mp pid -o THREAD,tid,time显示线程列表3.prin ...
- pandas 读取excel的指定列
不管对于read_csv还是read_excel,现在都有: usecols : int or list, default None If None then parse all columns, I ...
- DB2导入导出方法总结
1.导出 DEL 文本文件 export to D:\T_TESTTABLE20121220.del of del select * from T_TESTTABLE 2.导出 ixf 文本文件.i ...
- setintervalue传参数的三种方法
http://www.cnblogs.com/wkylin/archive/2012/09/07/2674911.html http://www.bhcode.net/article/20110822 ...
- enter回车---焦点切换
$(function(){ $('.enter').bind('keydown',function(e){ var inputs = $('.enter_cash'); var key = e.whi ...
- WebAPI序列化后的时间中含有“T”的解决方法
问题: { "name": "abc", "time": "2015-02-10T15:18:21.7046433+08:00&q ...
- 分享知识-快乐自己:Java中的经典算法之冒泡排序(Bubble Sort)
原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后.然后比较第2个数和第3个数,将 ...
- AliRedis单机180w QPS, 8台服务器构建1000w QPS Cache集群(转)
http://blog.sina.com.cn/s/blog_e59371cc0101br74.html 引言: 如今redis凭借其高性能的优势, 以及丰富的数据结构作为cache已越 ...