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