static void ParseTest(string str)
{
Regex reg = new Regex(@"(?<num>\d+)(?<sg>[_!$#])(?<dia>\d+)\s?((?<frn>\d+)(\/(?<nrn>\d+))*)?"); var m = reg.Match(str);
if (m.Success)
{
Console.WriteLine($"解析{str}成功!");
Console.WriteLine($"num:{m.Groups["num"].Value}");
Console.WriteLine($"sg:{m.Groups["sg"].Value}");
Console.WriteLine($"dia:{m.Groups["dia"].Value}");
Console.WriteLine($"frn:{m.Groups["frn"].Value}");
var captures = m.Groups["nrn"].Captures;
if (captures.Count > 0)
{
Console.WriteLine("成功捕获到nrn命名组:");
foreach (Capture cp in captures)
{
Console.WriteLine(cp.Value);
}
}
}
} static void Main(string[] args)
{
List<string> strs = new List<string>
{
"15_25","10_25 4/3/3"
};
strs.ForEach(n => ParseTest(n));
}

static void ParseTestA(string str)
{
Regex reg = new Regex(@"(?<num>\d+)(?<sg>[_!$#])(?<dia>\d+)\s?((?<nrn>\d+)(\/(?<nrn>\d+))*)?"); var m = reg.Match(str);
if (m.Success)
{
Console.WriteLine($"解析{str}成功!");
Console.WriteLine($"num:{m.Groups["num"].Value}");
Console.WriteLine($"sg:{m.Groups["sg"].Value}");
Console.WriteLine($"dia:{m.Groups["dia"].Value}"); var captures = m.Groups["nrn"].Captures;
if (captures.Count > 0)
{
Console.WriteLine("成功捕获到nrn命名组:");
foreach (Capture cp in captures)
{
Console.WriteLine(cp.Value);
}
}
}
}

static void ParseTestB(string str)
{
Regex reg = new Regex(@"(?<num>\d+)(?<sg>[_!$#])(?<dia>\d+)([((]-(?<delA>\d+)[))])?(\s)?((?<frn>(\d+([((]-\d+[))])?))(\/(?<nrn>\d+([((]-\d+[))])?))*)?");
Regex regA = new Regex(@"(?<num>\d+)?([((]-(?<nnum>\d+)[))])?");
var m = reg.Match(str);
if (m.Success)
{
Console.WriteLine($"解析{str}成功!");
Console.WriteLine($"num:{m.Groups["num"].Value}");
Console.WriteLine($"sg:{m.Groups["sg"].Value}");
Console.WriteLine($"dia:{m.Groups["dia"].Value}");
Console.WriteLine($"delA:{m.Groups["delA"].Value}");
Console.WriteLine($"frn:{m.Groups["frn"]}");
var mm = regA.Match(m.Groups["frn"].Value);
if (mm.Success)
{
Console.WriteLine($"frn之num:{mm.Groups["num"].Value}");
Console.WriteLine($"frn之nnum:{mm.Groups["nnum"].Value}");
}
var captures = m.Groups["nrn"].Captures;
if (captures.Count > 0)
{
Console.WriteLine("成功捕获到nrn命名组");
foreach(Capture cp in captures)
{
Console.WriteLine(cp.Value);
var mmm = regA.Match(cp.Value);
if (mmm.Success)
{
Console.WriteLine($"nrn之num:{mmm.Groups["num"].Value}");
Console.WriteLine($"nrn之nnum:{mmm.Groups["nnum"].Value}");
}
}
} }
} static void Main(string[] args)
{
List<string> strs = new List<string>
{
"15_25(-10)","10_25 4(-2)/3(-3)/3"
};
strs.ForEach(n => ParseTestB(n));
}

static void ParseTestC(string str)
{
string singleInfo = $@"((?<num>\d+)(?<sg>[!_$#])(?<dia>\d+))";
string plusInfo = $@"(?<singleInfo>{singleInfo})(\+(?<singleInfo>{singleInfo}))*";
string totalInfo = $@"(?<plusInfo>{plusInfo})(\/(?<plusInfo>{plusInfo}))*";
Regex regA = new Regex(totalInfo);Regex regB = new Regex(plusInfo), regC = new Regex(singleInfo);
var m = regA.Match(str);
if (m.Success)
{
Console.WriteLine($"{str}解析成功:");
var captures = m.Groups["plusInfo"].Captures;
if (captures.Count > 0)
{
foreach(Capture cap in captures)
{
Console.WriteLine("PlusInfo:"+cap.Value);
var mm = regB.Match(cap.Value);
if (mm.Success)
{
var capturesA = mm.Groups["singleInfo"].Captures;
if (capturesA.Count > 0)
{
foreach(Capture capA in capturesA)
{
Console.WriteLine("singleInfo:"+capA.Value);
var mmm = regC.Match(capA.Value);
if (mmm.Success)
{
//Console.WriteLine($"{capA.Value}解析成功:");
Console.WriteLine($"num:{mmm.Groups["num"].Value}");
Console.WriteLine($"sg:{mmm.Groups["sg"].Value}");
Console.WriteLine($"dia:{mmm.Groups["dia"].Value}");
}
}
}
}
}
}
}
} static void Main(string[] args)
{
List<string> strs = new List<string>
{
"3_25+2_20/2_30+3_20","3_25",
"2_10/2_20+2_12+4_12/4_30+2_12"
};
strs.ForEach(n => ParseTestC(n));
}

C#正则之获取命名组所有捕获的数据的更多相关文章

  1. SQLServer获取每组前10%的数据

    sqlserver2005有关键字ntile(x)和over(partition by.. order by..)子句配合. 比如获取每个表的前10%个字段. selectid,name,colid, ...

  2. SQL 分组后只获取每组的一条数据

    /****** Object: Table [dbo].[TEMP] Script Date: 2018-8-22 星期三 23:33:09 ******/ SET ANSI_NULLS ON GO ...

  3. 前向否定界定符 python正则表达式不匹配某个字符串 以及无捕获组和命名组(转)

    [编辑] 无捕获组和命名组 精心设计的 REs 也许会用很多组,既可以捕获感兴趣的子串,又可以分组和结构化 RE 本身.在复杂的 REs 里,追踪组号变得困难.有两个功能可以对这个问题有所帮助.它们也 ...

  4. JS 正则中的命名捕获分组

    假设你在一段陌生的代码中看到这样一个函数: function toLocalDate(date) { return date.replace(/(\d{2})-(\d{2})-(\d{4})/, &q ...

  5. .NET正则基础之——平衡组

    1        概述 平衡组是微软在.NET中提出的一个概念,主要是结合几种正则语法规则,提供对配对出现的嵌套结构的匹配..NET是目前对正则支持最完备.功能最强大的语言平台之一,而平衡组正是其强大 ...

  6. 第11.17节 Python 正则表达式扩展功能:命名组功能及组的反向引用

    一. 引言 在<第11.16节 Python正则元字符"()"(小括号)与组(group)匹配模式>介绍了组匹配模式,在一个正则表达式内可以定义多个组,每个组都有一个顺 ...

  7. js:通过正则匹配获取页面的url中的参数

    简介:获取页面参数 原生js: //通过正则匹配获取当前页面的url中的参数 function getUrlParam(name){ var reg = new RegExp("(^|&am ...

  8. XMPP系列(七)---获取群组列表

    上一篇介绍了如何创建群组,这一篇就介绍一下,如何获取自己的群组列表. 在上一篇有提到,如果我们创建的群组是公共的群组,那么获取自己的群组列表时,会获取到自己的群组列表和那些公共的群组.而实际做社交的应 ...

  9. mssql sqlserver 使用sql脚本获取群组后,按时间排序(asc)第一条数据的方法分享

    摘要: 下文讲述使用sql脚本,获取群组后记录的第一条数据业务场景说明: 学校教务处要求统计: 每次作业,最早提交的学生名单下文通过举例的方式,记录此次脚本编写方法,方便以后备查,如下所示: 实现思路 ...

  10. 正则匹配获取HTML图片地址,正则匹配获取HTML内容

    //正则匹配获取HTML图片地址preg_match_all('/<img.*?src="(.*?)".*?>/is', $str, $array); if (isse ...

随机推荐

  1. MySQL - [07] 查看库表数据所使用的空间大小

    1.切换数据库:use information_schema; 2.查看数据库使用大小 SELECT concat(round(sum(data_length/1024/1024),2),'MB') ...

  2. CentOS7搭建CDH5.16.2集群 HA高可用(包含Spark2等组件部署)

    CentOS7搭建CDH5.16.2集群 HA高可用   机器准备:(这里HA是对HDFS和YARN的高可用) 主机名 cpu内存 bigdata-master01 8c32G bigdata-mas ...

  3. Scala样例类及底层实现伴生对象

    package com.wyh.day01 /** * 样例类的使用 * 1.使用case修饰类 * 2.不需要写构造方法,getter,setter方法,toString方法 * 3.直接通过对象名 ...

  4. DeFi(去中心化金融)的硬核知识

    1. ​DeFi流动性挖矿:躺着赚利息的"矿工"​ 简单来说,流动性挖矿就像你往银行存钱赚利息,但这里存的是加密货币,利息更高,还能随时提现.比如你往Uniswap这样的去中心化交 ...

  5. Gits-命令

    Git基础命令 Git是一个分布式版本控制系统,由Linus Torvalds创建,用于有效.高速地处理从小到大的项目版本管理.以下是一些基本的Git命令和概念,它们对于使用Git进行版本控制至关重要 ...

  6. Visio绘制时间轴安排图的方法

      本文介绍基于Visio软件绘制时间轴.日程安排图.时间进度图等的方法.   在很多学习.工作场合中,我们往往需要绘制如下所示的一些带有具体时间进度的日程安排.工作流程.项目进展等可视化图表.    ...

  7. docker 配置安装宝塔面板

    宝塔镜像 https://hub.docker.com/r/btpanel/baota 配置宝塔 第一步:创建一个名为 bt-data 的目录,此目录将存储宝塔数据. $ mkdir bt-data ...

  8. golang实现三重DES加密解密

    DES DES(Data Encryption)是1977年美国联邦信息处理标准(FIPS)中所采用的一种对称密码(FIPS46-3),一直以来被美国及其他国家的政府和银行等广泛使用.随着计算机的进步 ...

  9. Dockerfile 语法与常用命令

    转发请注明出处: 一.Dockerfile 核心语法规则 指令大写:所有指令必须大写(如 FROM, RUN) 顺序执行:指令按顺序从上到下执行 分层构建:每条指令生成一个镜像层,修改上层不会影响下层 ...

  10. vue学习一(指令3.v-on,v-for)

    3.1.v-on 绑定事件  可以简写为@ ,按键修饰符    v-on:keyup    =    @keyup 事件修饰符:v-on提供了事件修饰符 修饰符是由点开头的指令后缀来表示的       ...