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})
,但它不接受
答案 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 1999
和Jan
1999
现在它将捕获:
Jan 1999
和1999
1999
答案 1 :(得分:2)
原帖
\b((\w{3})?\s\d{4})\b
正则表达式匹配RegexOne模式
((\w{3})?[\s\b](\d{4}))
忘了一个小组。
匹配Mon YEAR
或YEAR
。
答案 2 :(得分:1)
RegexOne的工作解决方案是:
((Jan|May|Aug)\s(1987|1969|2011))
您需要正确阅读文本,任务是捕获年以及整个日期。
正如@Druzion指出的那样,正则表达式仍然可以进行优化,如下所示:
((?:Jan|May|Aug)\s(\d{4}))
它捕获整个日期,使用非捕获组作为月份部分并分别捕获年份。
答案 3 :(得分:0)
您可以使用以下表达式:
(\w+\s(\d+))|(\d+)
这会很好。