【发布时间】:2013-11-25 20:11:10
【问题描述】:
我正在使用 C# Regex 类。我正在尝试将两个字符串从一个字符串中拆分出来。源(输入)字符串的构造方式如下:
第一部分必须匹配 PO|P|S|[1-5](正则表达式语法)。
第二部分可以是 VP|GZ|GAR|PP|NAD|TER|NT|OT|LO(同样,正则表达式语法)。第二部分可以出现零次或一次。
可接受的示例是“PO”(一组)、“POGAR”(两组 PO+GAR)、“POT”(P+OT)...
所以我使用了以下正则表达式:
Regex r = new Regex("^(?<first>PO|P|S|[1-5])(?<second>VP|GZ|GAR|PP|NAD|TER|NT|OT|LO)?$");
Match match = r.Match(potentialToken);
当potentialToken为“PO”时,返回3组!怎么会?我只期待一组(第一组)。
match.Groups 是 {"PO","PO",""}
命名组正常 - match.Groups["first"] 返回 1 个实例,而 match.Groups["second"].Success 为 false。
【问题讨论】:
-
您的正则表达式中似乎存在语法错误 -
second前面应该有一个<。另外,在按索引检索match.Groups时,您是否检查了组的Success值? -
我已经修正了你注意到的语法(谢谢)。 match.Groups 中的成功值为 {"PO",true;"PO",true;"",false}