非捕获组不在Regex中工作

时间:2012-09-06 06:34:08

标签: .net regex

使用正则表达式,我想匹配以下字符串:

January 25
Jan 25

我分别捕获月份和日期部分,但是如果有完整的月份名称,则只想返回月份名称的前3个字符,所以我使用非捕获组(?:)作为字符“uary” :

(?<M>(Jan(?:uary)?)) (?<D>\d\d)

不幸的是,小组M总是返回完整的月份名称;即它也捕获非捕获组。

我已经开启了ExplicitCapture标志。我已经使用了RegExBuilder和Rad Software的正则表达式设计器来确保它不是因为该工具。

2 个答案:

答案 0 :(得分:4)

您的捕获组应仅包围Jan

(?<M>Jan)(?:uary)? (?<D>\d{1,2})

您的原始表达式大致相当于(?<M>January|Jan) (?<D>\d\d)。非捕获组并不意味着从现有捕获组中删除匹配。这仅表示没有创建新的捕获组。

答案 1 :(得分:1)

尝试:

(?<M>Jan)(?:uary)? (?<D>\d\d)