如何检查命名的捕获组是否存在?

时间:2013-05-05 21:31:16

标签: c# regex

在我的正则表达式中,模式是这样的:

@"Something\(\d+, ""(.+)""(, .{1,5}, \d+, (?<somename>\d+)?\),"

所以我想知道<somename>是否存在。如果它是一个正常的捕获组,我可以检查捕获组是否大于没有那个/那些捕获组的组数,但是我没有这里的选项。

有人能帮我找到解决方法吗?我不需要它有效率,它只是用于一次性程序用于排序,所以我不介意它是否需要运行一点。它不适用于公共代码。

1 个答案:

答案 0 :(得分:29)

根据documentation

  

如果groupname不是集合中捕获组的名称,   或者groupname是尚未捕获的组的名称   在输入字符串中匹配,该方法返回一个Group对象   Group.Success属性为false,其Group.Value属性为   的String.Empty。

var regex = new Regex(@"Something\(\d+, ""(.+)""(, .{1,5}, \d+, (?<somename>\d+)?\),");
var match = regex.Match(input);
var group = match.Groups["somename"];
bool exists = group.Success;