myRegex.GetGroupNames()
Run Code Online (Sandbox Code Playgroud)
似乎也返回编号的组...如何只获得命名的组?
使用实际Match对象的解决方案也可以.
RegexOptions.ExplicitCapture在创建正则表达式时使用该选项可以执行您想要的操作吗?例如
Regex theRegex = new Regex(@"\b(?<word>\w+)\b", RegexOptions.ExplicitCapture);
Run Code Online (Sandbox Code Playgroud)
来自MSDN:
指定唯一有效的捕获是表单的显式命名或编号组
(?<name>...).这允许未命名的括号充当非捕获组,而没有表达式的语法笨拙(?:...).
因此,如果设置了此选项,则无需担心API的用户是否可以使用非捕获组.
public string[] GetGroupNames(Regex re)
{
var groupNames = re.GetGroupNames();
var groupNumbers = re.GetGroupNumbers();
Contract.Assert(groupNames.Length == groupNumbers.Length);
return Enumerable.Range(0, groupNames.Length)
.Where(i => groupNames[i] != groupNumbers[i].ToString())
.Select(i => groupNames[i])
.ToArray();
}
Run Code Online (Sandbox Code Playgroud)
实际上,当组名和编号恰好相同时,这仍然会失败:\但即使组名是数字,只要该编号与其索引不同,它也会成功。
| 归档时间: |
|
| 查看次数: |
5006 次 |
| 最近记录: |