首页 > 解决方案 > 使用 .NET 正则表达式,是否可以在重复捕获中捕获组?

问题描述

我正在验证一个字符串,该字符串必须包含与模式匹配的前缀(称为它pat1),后跟 0 个或多个重复模式,每个模式都包含我想单独捕获的 3 个子模式( pat2pat3、 )。pat4稍微简化一下,正则表达式基本上是这样的:

^pat1 ((pat2) (pat3) (pat4))*$

^存在and$锚点是因为如果字符串在开头或结尾包含任何无关字符,则匹配将失败。

使用Regex.Match有效的表达式,我得到一个Match具有以下特征的对象:

我不知道该怎么pat2是从每个. 这甚至可以通过单个正则表达式的单次执行来实现吗?我开始不这么认为了。(如果有房产,那可能正是我需要的。但它没有。)pat3pat4 CaptureCaptureGroups

如果我使用完全不同的方法Regex.Matches代替Regex.Match,我想我可以捕获我需要的所有单个位,但它不会验证字符串在匹配之前、之后或之间不能包含无关字符。

所以我现在采取的是执行原始表达式,迭代Groups[1].Captures并再次执行正则表达式(这次只是(pat2) (pat3) (pat4)),只是为了解析每个捕获中的 3 个组。这感觉就像我正在让引擎重复已经完成的工作,但也许这是唯一的方法?

作为旁注,我做了很多搜索“捕获中的组”等,并且非常惊讶地出现空缺。我认为这是一种常见的情况,这让我想知道我是否应该采取完全不同的方法。我愿意接受任何以合理有效的方式满足所有验证和捕获要求的建议。

标签: c#.netregex

解决方案


推荐阅读