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 ...
随机推荐
- Linux MiniMal版本常规所需环境安装
Docker 环境安装 前置工作 之 基础环境安装 当前环境 centos7.9 64位 minimal版本 当前环境为 root用户 若当前存在Docker环境 需卸载 yum remove doc ...
- php批量删除记录
<?php $arr = $_POST["item"]; $db = new mysqli("localhost","root",&q ...
- wxpython SetValue 获取列表数据获取不到
self.m_textCtrl4.SetValue(files) 同样的方法获取其他值就获取到了 ,后来想了想files是列表数据,于是将类型变为str型成功 self.m_textCtrl4.Set ...
- 遍历列表、元组或字符串的函数enumerate
这两天在处理遇到的问题,循环遍历列表中的字典并输出到excel中 查阅资料发现了一个正和我意的函数 所以周一一上班我就开始试一试 然而发现 enumerate函数只适用于列表.元组或字符串的函数 语法 ...
- Web前端入门第 6 问:HTML 的基础语法结构
HTML的全称为超文本标记语言(HyperText Markup Language),基础语法结构由标签.元素.属性和内容组成,遵循层级嵌套的树形结构. 关键语法规则 标签(Tags) 双标签语法 标 ...
- linux安装python centos
下载安装包 可以到官网 ftp 地址,复制指定 python 版本源码安装包下载链接 https://www.python.org/ftp/python/ 或者到官网 downloads, 复制指定 ...
- 搭建docker swarm集群实现负载均衡
Swarm简介:Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源.Swarm ...
- Ubuntu安装GPU驱动+CUDA+cuDNN的安装方法
一台有GPU的虚拟机如果没有安装CUDA的驱动,是需要我们手动去进行安装的,介绍Ubuntu操作系统的安装教程. 1. 下载安装文件 NVIDIA CUDA Toolkit Archive 点击上面链 ...
- Vim 操作-替换
Vim 操作-替换 substitute :[range]s[ubstitute]/{pattern}/{string}/{flag} 替换的操作范围以行为基础: %-全局范围,m,n-使用逗号隔开的 ...
- MySQL查询当前连接数的语句
1. 查看当前总连接数 SHOW STATUS LIKE 'Threads_connected'; 返回当前建立的连接总数 2. 查看最大连接数配置 SHOW VARIABLES LIKE 'max_ ...