2

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

January 25
Jan 25

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

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

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

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

4

2 回答 2

4

您的捕获组应该只围绕 Jan.

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

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

于 2012-09-06T06:35:36.153 回答
1

尝试:

(?<M>Jan)(?:uary)? (?<D>\d\d)
于 2012-09-06T06:43:08.183 回答