C#正则之获取命名组所有捕获的数据
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#正则之获取命名组所有捕获的数据的更多相关文章
- SQLServer获取每组前10%的数据
sqlserver2005有关键字ntile(x)和over(partition by.. order by..)子句配合. 比如获取每个表的前10%个字段. selectid,name,colid, ...
- SQL 分组后只获取每组的一条数据
/****** Object: Table [dbo].[TEMP] Script Date: 2018-8-22 星期三 23:33:09 ******/ SET ANSI_NULLS ON GO ...
- 前向否定界定符 python正则表达式不匹配某个字符串 以及无捕获组和命名组(转)
[编辑] 无捕获组和命名组 精心设计的 REs 也许会用很多组,既可以捕获感兴趣的子串,又可以分组和结构化 RE 本身.在复杂的 REs 里,追踪组号变得困难.有两个功能可以对这个问题有所帮助.它们也 ...
- JS 正则中的命名捕获分组
假设你在一段陌生的代码中看到这样一个函数: function toLocalDate(date) { return date.replace(/(\d{2})-(\d{2})-(\d{4})/, &q ...
- .NET正则基础之——平衡组
1 概述 平衡组是微软在.NET中提出的一个概念,主要是结合几种正则语法规则,提供对配对出现的嵌套结构的匹配..NET是目前对正则支持最完备.功能最强大的语言平台之一,而平衡组正是其强大 ...
- 第11.17节 Python 正则表达式扩展功能:命名组功能及组的反向引用
一. 引言 在<第11.16节 Python正则元字符"()"(小括号)与组(group)匹配模式>介绍了组匹配模式,在一个正则表达式内可以定义多个组,每个组都有一个顺 ...
- js:通过正则匹配获取页面的url中的参数
简介:获取页面参数 原生js: //通过正则匹配获取当前页面的url中的参数 function getUrlParam(name){ var reg = new RegExp("(^|&am ...
- XMPP系列(七)---获取群组列表
上一篇介绍了如何创建群组,这一篇就介绍一下,如何获取自己的群组列表. 在上一篇有提到,如果我们创建的群组是公共的群组,那么获取自己的群组列表时,会获取到自己的群组列表和那些公共的群组.而实际做社交的应 ...
- mssql sqlserver 使用sql脚本获取群组后,按时间排序(asc)第一条数据的方法分享
摘要: 下文讲述使用sql脚本,获取群组后记录的第一条数据业务场景说明: 学校教务处要求统计: 每次作业,最早提交的学生名单下文通过举例的方式,记录此次脚本编写方法,方便以后备查,如下所示: 实现思路 ...
- 正则匹配获取HTML图片地址,正则匹配获取HTML内容
//正则匹配获取HTML图片地址preg_match_all('/<img.*?src="(.*?)".*?>/is', $str, $array); if (isse ...
随机推荐
- 解决黑群晖 Docker 日志八小时时间差的有效方法
步骤一:登录黑群晖控制台 首先,我们需要登录到黑群晖控制台.可以通过SSH登录,或是直接在黑群晖控制台界面上操作. 步骤二:停止相关的Docker容器 在解决时间差问题之前,我们需要停止相关的Dock ...
- autMan奥特曼机器人-内置容器安装依赖报错:externally-managed-environment
在 Manjaro 22.Ubuntu 23.04.Fedora 38 等最新的linux发行版中运行pip install时,通常会收到一个错误提示:error: externally-manage ...
- Vulnhub-Hackme
一.靶机搭建 选择扫描虚拟机 选择路径即可 二.信息收集 靶机信息 Name: hackme: 1 Date release: 18 Jul 2019 难度:初级,目标是通过web漏洞获得有限的权限访 ...
- FastAPI 自定义参数验证器完全指南:从基础到高级实战
title: FastAPI 自定义参数验证器完全指南:从基础到高级实战 date: 2025/3/11 updated: 2025/3/11 author: cmdragon excerpt: 本教 ...
- SVG path 标签根据两点和角度绘制弧线
同步发布:https://blog.jijian.link/2020-04-14/svg-arc/ 由于功能受限,此处不能放 iframe 嵌入链接,如需看到实时效果,请移步 https://blog ...
- HarmonyOS_Next 星河版迁移报错记录【自用】
Object literal must correspond to some explicitly declared class or interface (arkts-no-untyped-obj- ...
- gin解决CORS跨域问题
直接设置跨域参数 新建 cors 文件 package cors import ( "time" "github.com/gin-contrib/cors" & ...
- go map fatal error: concurrent map iteration and map write 读写锁与深度拷贝的坑
起因 从币安实时拉取交易对的数据,这里使用了 map,用于存放每个交易对的最新价格,由于 map 并不是并发安全的所以加了读写锁. 但系统有时候还是会发生 fatal error: concurren ...
- Linux指令详解之:ctl相关命令大礼包
目录 6.4 服务管理命令(ctl大礼包) 6.4.1 systemctl 6.5.2 systemctl小结 6.5.3 timedatectl 6.5.4 localectl 6.5.5 netw ...
- 自动旋转ROS小车(rviz+urdf+xacro)(附加python操作键盘控制小车运动)
博客地址:https://www.cnblogs.com/zylyehuo/ 成果图 STEP1 创建工作空间 mkdir -p car_ws/src cd car_ws catkin_make ST ...