.net 非捕获组不在正则表达式中工作

.net 非捕获组不在正则表达式中工作,.net,regex,.net,Regex,使用regex,我希望匹配以下字符串: January 25 Jan 25 我正在分别捕获月份和日期部分,但如果有完整的月份名称,我只想返回月份名称的前3个字符,因此我将非捕获组(?:)用于字符“uary”: (?(一月日))(?\d\d) 不幸的是,组M总是返回完整的月份名称;i、 e.它也捕获非捕获组 我已经打开了ExplicitCapture标志。我已经使用了RegExBuilder和Rad软件的正则表达式设计器来确保这不是因为该工具。您的捕获组应该只围绕Jan (?<M>

使用regex,我希望匹配以下字符串:

January 25
Jan 25
我正在分别捕获月份和日期部分,但如果有完整的月份名称,我只想返回月份名称的前3个字符,因此我将非捕获组
(?:)
用于字符“uary”:

(?(一月日))(?\d\d)
不幸的是,组
M
总是返回完整的月份名称;i、 e.它也捕获非捕获组


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

您的捕获组应该只围绕
Jan

(?<M>Jan)(?:uary)? (?<D>\d{1,2})
(?一月)(?一月)?(?\d{1,2})
原始表达式大致相当于
(?一月|一月)(?\d\d)
。非捕获组并不意味着从现有捕获组中删除匹配项。这意味着不会创建新的捕获组。

请尝试:

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

哪种语言?正则表达式有几种不同的风格,不同的宿主语言使用不同的风格。(4.0,如果这很重要的话)。感谢您的快速、准确和信息量大。这个解释和你的答案一样有用。我看到的唯一问题是,它只会在一天中有两个数字时匹配。最后一组应该是
(?\d{1,2})
(?<M>Jan)(?:uary)? (?<D>\d\d)