原文:

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)函数正则表达式理解的更多相关文章

  1. Python中网络编程对 listen 函数的理解

    listen函数的第一个参数时SOCKET类型的,该函数的作用是在这个SOCKET句柄上建立监听,至于有没有客户端连接进来,就需要accept函数去进行检查了,accept函数的第一个参数也是SOCK ...

  2. Java中如何将String转成Date

    Java中如何将String转成Date 最近在开发Json数据反序列化为Java对象的时候发现spring mvc 和 Jackson 对Date类型对支持不是特别好,虽然在Java对象序列化为Js ...

  3. java中特殊的String类型

    Java中String是一个特殊的包装类数据有两种创建形式: String s = "abc"; String s = new String("abc"); 第 ...

  4. C# 中怎么将string转换成int型

    int intA = 0;1.intA =int.Parse(str);2.int.TryParse(str, out intA);3.intA = Convert.ToInt32(str);以上都可 ...

  5. c#中 uint--byte[]--char[]--string相互转换汇总

    原文:c#中 uint--byte[]--char[]--string相互转换汇总 在在做一些互操作的时候往往需要一些类型的相互转换,比如用c#访问win32api的时候往往需要向api中传入DWOR ...

  6. 用eclipes 添加jboss tools中的hibernate tool进行反向工程生成数据库对应的BOJO(Javabean)

    用eclipes 添加jboss tools中的hibernate tool进行反向工程生成数据库对应的BOJO(Javabean) 安装: 在help中eclise marksplace中查询JBo ...

  7. java中string.trim()函数的使用

    java中string.trim()函数的的作用是去掉字符串开头和结尾的空格,防止不必要的空格导致的错误. public static void main(String arg[]){ String ...

  8. C++中int与string的转化

    C++中int与string的转化 int本身也要用一串字符表示,前后没有双引号,告诉编译器把它当作一个数解释.缺省情况下,是当成10进制(dec)来解释,如果想用8进制,16进制,怎么办?加上前缀, ...

  9. java和js中int和String相互转换常用方法整理

    java中int和String的相互转换常用的几种方法: int  > String int i=10;String s="";第一种方法:s=i+""; ...

随机推荐

  1. Spring初学之spring的事务管理xml

    所有的java类都是用的上一篇文章:Spring初学之spring的事务管理 不同的是,这时xml配置事务,所以就要把java类中的那些关于spring的注解都删掉,然后在xml中配置,Applica ...

  2. 彻底弄清python的切片

    lis = range(100) # [0, 1, 2, 3, ..., 99] # 取前10个 lis[:10] # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # 取后10个 l ...

  3. eclipse下进行c开发,使用zeromq

    使用eclipse开发代码,一段zeromq的代码. #include <string.h> #include <stdio.h> #include <unistd.h& ...

  4. android EventBus的简单使用

    今天,简单讲讲Android里关于EventBus的使用. 这几天,由于面试的缘故,我听到了很多Android的流行框架,但是之前自己在公司做APP时并没有使用,所以没有了解.于是在网上查找了资料,学 ...

  5. 报表研究之工具篇-VBA

    最近一直在研究VBA,写报表的工作.将所得的知识,经验总结一下,与大家分享. 工具篇,VBA 1.EXCEL一个最好用的功能就是录制宏,当一个函数拿不准要怎么写,用什么函数表示的时候,录制就帮了大忙了 ...

  6. hdu4217splay

    题意:有1到n的数组,每次删除第k小的值,并求和 题解:splay基本操作,删除+合并 坑点:由于不会c++指针操作,sb的只删除了头指针导致一直mle #include<bits/stdc++ ...

  7. C# 6.0 编译器

    C# 6.0编译器:可以将csc.exe所在位置 C:\Program Files (x86)\MSBuild\14.0\Bin 添加到Path环境变量. C:\>csc Microsoft ( ...

  8. Django 基础 ORM系统

    Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...

  9. Struts2(2)

    一.分模块开发:单独写模块的配置文件,把配置文件引入到核心配置文件中 Aaction的单独配置文件如下 <?xml version="1.0" encoding=" ...

  10. 20165210 Java第二次实验报告

    20165210 实验二 Java面向对象程序设计 一.面向对象程序设计1--单元测试和TDD 实验要求 参考 http://www.cnblogs.com/rocedu/p/6371315.html ...