正则表达式 捕获分组

string st = @"sdfs<202|303|8|808>108|8|998|8";

  string s = Regex.Replace(st, @"(?<left><)[0-9\|]*(?<right>>)", "${left}${right}", RegexOptions.IgnoreCase);

 

s的内容为"sdfs<>108|8|998|8"

 

(?<name>)可以定义一个分组,名称为那么,<name>后跟匹配符号,应用时可以使用${name} 或对应的$0-9的某一个

转载于:https://www.cnblogs.com/hdjjun/archive/2008/06/17/1223756.html

### 捕获组(Capture Groups)详解 捕获组是正则表达式中用于**捕获子匹配内容**的语法,通过使用括号 `()` 包裹的部分会被单独记录,便于后续提取或操作。它是处理复杂文本匹配时最常用的功能之一 [^3]。 #### 提取子内容 捕获组允许从完整的匹配中提取特定的部分。例如,正则表达式 `(\d{4})-(\d{2})-(\d{2})` 可以匹配日期格式 `YYYY-MM-DD`,并分别捕获年、月、日三个部分: ```javascript const text = "2023-10-01"; const regex = /(\d{4})-(\d{2})-(\d{2})/; const match = text.match(regex); console.log(match); // 输出: [ // "2023-10-01", // 完整匹配 // "2023", // 第1捕获组(年) // "10", // 第2捕获组(月) // "01" // 第3捕获组(日) // ] ``` #### 索引编号 捕获组的编号从左到右按 `( ` 出现的顺序分配,从1开始。例如,在正则表达式 `/((\d{2}):(\d{2}))\s+(\d{2}:\d{2})/` 中,第一个完整的匹配是整个时间字符串,第二个捕获组是第一个时间部分,第三个是分钟,第四个是第二个时间字符串 。 #### 复用匹配 捕获组的内容可以在正则表达式中通过反向引用复用。例如,正则表达式 `(\w+)\s+\1` 可以匹配重复的单词,如 `hello hello`: ```javascript const text = "hello hello world"; const regex = /(\w+)\s+\1/; const match = text.match(regex); console.log(match); // 输出: ["hello hello", "hello"] ``` #### 命名捕获组(Named Capture Groups) ES2018 引入了命名捕获组功能,通过 `?<name>` 语法为捕获组命名,使得提取和引用更加直观。例如: ```javascript let reg = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/u; let str = '2015-01-02'.replace(reg, (matched, capture1, capture2, capture3, position, S, groups) => { let { day, month, year } = groups; return `${day}/${month}/${year}`; }); console.log(str); // 输出: "02/01/2015" ``` 命名捕获组通过 `groups` 属性访问,结构清晰,易于维护 [^4]。 #### 非捕获组(Non-Capturing Group) 非捕获组用于分组但不捕获匹配内容,语法为 `(?:...)`。例如,正则表达式 `(?:abc)+` 匹配一个或多个连续的 `abc`,但不会单独记录该组的内容 。 ```javascript const text = "abcabcabc"; const regex = /(?:abc)+/; const match = text.match(regex); console.log(match); // 输出: ["abcabcabc"] ``` #### 使用场景 - **数据提取**:从非结构化文本中提取特定格式的数据,如价格区间、尺寸等 [^2]。 - **格式验证**:验证输入是否符合特定格式,如邮箱、电话号码等 [^2]。 - **字符串替换**:在复杂替换场景中,使用捕获组进行动态替换 [^4]。 - **日志分析**:解析日志文件,提取关键信息如时间戳、日志级别、消息等 [^1]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值