原文:

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. mysql基础(3)-高级查询

    聚合函数 count 返回查询结果的条数 max 返回查询结果的最大值 min 返回查询结果的最小值 sum 返回查询结果的和 avg 返回查询结果的平均值   统计分数大于等于90的人数: mysq ...

  2. UVA 11186 Circum Triangle (枚举三角形优化)(转)

    题意:圆上有n个点,求出这n个点组成的所有三角形的面积之和 题解: 当我们要求出S(i,j,k)时,我们需要假设k在j的左侧,k在i与j之间,k在i的右侧. 如果k在 j的左侧  那么 S(i,j,k ...

  3. python的map与reduce与filter

    map(f, Itera)  # 对每一个元素都使用f(x) >>> sq = lambda x:x**2 >>> l = map(sq,[-1,0,1,2,-3] ...

  4. Delphi调用Java类

    1. Delphi XE7调用Java Class,JAR http://www.th7.cn/Program/delphi/201409/277888.shtml ZC: 文章中又提到:http:/ ...

  5. c++ Const关键字

    转自:http://blog.csdn.net/Eric_Jo/article/details/4138548 C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根 ...

  6. js命令模式

    命令模式(Command),将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤销的操作. 从命令模式的结构图可以看出,它涉及到五个角色,它们分别是 ...

  7. Android之动画1

    点此下载 package com.example.animationdemo; import java.util.Timer; import java.util.TimerTask; import a ...

  8. Deep Learning(Ian Goodfellow) — Chapter2 Linear Algebra

    线性代数是机器学习的数学基础之一,这里总结一下深度学习花书线性代数一章中机器学习主要用到的知识,并不囊括所有线性代数知识. 2.1 基础概念 Scalars: 一个数: Vctors: 一列数: Ma ...

  9. hdu2665 主席树(可持久化线段树)

    题意:给定一个数组,每次查询第l到r区间的第k大值 解法嘛,当然是主席树,主席树即可持久化线段树,什么叫可持久化呢,就是指能够访问历史版本的数据结构,那么对于某些只能离线处理的题目强制在线之后 ,可以 ...

  10. spring boot 基础篇 -- 集成接口测试Swagger

    一.在pom.xml加入Swagger jar包引入 <dependency> <groupId>io.springfox</groupId> <artifa ...