.NET正则GetGroupNames返回组数量超出预期问题咨询
正则表达式中未预期的组1是什么?
你的正则表达式^(?<GROUP_1>[1-4][0-9]|7[3-9]|8[0-9])(?<GROUP_2>(\\d{5}))$里,GROUP_2的定义嵌套了一层额外的括号:(?<GROUP_2>(\\d{5}))。这里的内层括号(\\d{5})是一个未命名捕获组,它会被自动分配数字编号1,这就是你看到的组1的来源。
各组对应关系说明:
- 组0:默认的完整匹配结果,对应整个正则匹配的字符串
1395614 - 组1:内层未命名捕获组
(\\d{5})捕获的内容,也就是95614 - 组
GROUP_1:第一个命名捕获组,捕获正则前半部分的13 - 组
GROUP_2:外层命名捕获组,它的匹配范围和内层未命名组完全重合,所以捕获内容也是95614
解决方法:
把GROUP_2定义里的多余括号去掉,修改后的正则如下:
string patternRegex="^(?<GROUP_1>[1-4][0-9]|7[3-9]|8[0-9])(?<GROUP_2>\\d{5})$"
这样就不会创建额外的未命名捕获组,GetGroupNames()返回的结果就会是["0", "GROUP_1", "GROUP_2"],符合你的预期。
内容的提问来源于stack exchange,提问作者Bartosz
相关产品推荐
相关产品推荐

