首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正则表达式重复组

正则表达式重复组
EN

Stack Overflow用户
提问于 2012-11-27 17:17:37
回答 4查看 963关注 0票数 4

捕获重复组总是返回最后一个元素,但这并不是很有帮助。例如:

代码语言:javascript
运行
复制
var regex = new RegEx("^(?<somea>a)+$");
var match = regex.Match("aaa");
match.Group["somea"]; // return "a"

我希望有一个匹配元素的集合,而不是最后一个匹配项。这有可能吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-11-27 17:19:19

CaptureCollection

您可以使用CaptureCollection,它表示单个采集组制作的一组captures

如果quantifier未应用于捕获组,则CaptureCollection包括单个Capture对象,该对象表示与组对象相同的捕获的子字符串。

如果将quantifier应用于捕获组,则CaptureCollection将为每个捕获的子字符串包含一个捕获对象,并且Group对象仅提供有关上次捕获的子字符串的信息。

所以你可以这样做

代码语言:javascript
运行
复制
var regex = new Regex("^(?<somea>a)+$");
var match = regex.Match("aaa");
List<string> aCaptures=match.Groups["somea"]
                            .Captures.Cast<Capture>()
                            .Select(x=>x.Value)
                            .ToList<string>();

//aCaptures would now contain a list of a
票数 6
EN

Stack Overflow用户

发布于 2012-11-27 17:22:07

看看Captures集合:

代码语言:javascript
运行
复制
match.Groups["somea"].Captures
票数 2
EN

Stack Overflow用户

发布于 2012-11-27 17:20:42

如果您量化的组将创建与匹配项一样多的组,则必须对要匹配的事物使用量词+,而不是组。

因此,aaa中的(a)+将创建1个组,并用新出现的匹配项替换匹配项,而(a+)将使用aaa创建1个组

因此,您知道如何处理您的问题,只需将+移动到捕获组中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13580848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档