使用正则表达式,我想匹配以下字符串:
January 25
Jan 25
我分别捕获月份和日期部分,但是如果有完整的月份名称,则只想返回月份名称的前3个字符,所以我使用非捕获组(?:)
作为字符“uary” :
(?<M>(Jan(?:uary)?)) (?<D>\d\d)
不幸的是,小组M
总是返回完整的月份名称;即它也捕获非捕获组。
我已经开启了ExplicitCapture标志。我已经使用了RegExBuilder和Rad Software的正则表达式设计器来确保它不是因为该工具。
答案 0 :(得分:4)
您的捕获组应仅包围Jan
。
(?<M>Jan)(?:uary)? (?<D>\d{1,2})
您的原始表达式大致相当于(?<M>January|Jan) (?<D>\d\d)
。非捕获组并不意味着从现有捕获组中删除匹配。这仅表示没有创建新的捕获组。
答案 1 :(得分:1)
尝试:
(?<M>Jan)(?:uary)? (?<D>\d\d)