正则表达式捕获1987年1月和1987年

时间:2016-04-12 19:33:06

标签: regex

Exercise 12: Matching Nested Groups
Task    Text    Capture Groups   
Capture Jan 1987    Jan 1987 1987   Failed
Capture May 1969    May 1969 1969   Failed
Capture Aug 2011    Aug 2011 2011   Failed

我找到了解决方案((...)\s\d{1,4})|(\d{1,4}),但它不接受

4 个答案:

答案 0 :(得分:2)

尝试:

([A-Za-z]+\s)?\d{1,4}

这将在数字

之前选择一个可选字

但是,在RegexOne上查看练习后,要捕获完成任务所需的内容,请使用:

((?:[A-Za-z]+\s)?(\d{1,4}))

你做错了什么。

((...)\s\d{1,4})|(\d{1,4})

您需要捕获年份和月份名称,因此您应该使用以下内容:

(...\s(\d{1,4}))|(\d{1,4})

()周围添加\d{1,4}以捕获它(您可以删除()周围的...,因为月份名称,例如Jan不会需要被捕获)。您的RegEx正在捕获:

  • Jan 1999Jan
  • 1999

现在它将捕获:

  • Jan 19991999
  • 1999

答案 1 :(得分:2)

原帖

\b((\w{3})?\s\d{4})\b

正则表达式匹配RegexOne模式

((\w{3})?[\s\b](\d{4}))

忘了一个小组。

匹配Mon YEARYEAR

答案 2 :(得分:1)

RegexOne的工作解决方案是:

((Jan|May|Aug)\s(1987|1969|2011))

您需要正确阅读文本,任务是捕获以及整个日期
正如@Druzion指出的那样,正则表达式仍然可以进行优化,如下所示:

((?:Jan|May|Aug)\s(\d{4}))

它捕获整个日期,使用非捕获组作为月份部分并分别捕获年份。

答案 3 :(得分:0)

您可以使用以下表达式: (\w+\s(\d+))|(\d+) 这会很好。