正则表达式匹配月份名称后跟年份

时间:2010-04-16 19:02:35

标签: regex

例如,是否可以使用正则表达式来匹配“2009年2月”?

4 个答案:

答案 0 :(得分:42)

沿着

的路线
\b(?:Jan(?:uary)?|Feb(?:ruary)?|...|Dec(?:ember)?) (?:19[7-9]\d|2\d{3})(?=\D|$)

这是

\b                  # a word boundary
(?:                 # non-capturing group
  Jan(?:uary)?      # Jan(uary)
  |Feb(?:ruary)?    #
  |...              # and so on
  |Dec(?:ember)?    # Dec(ember)
)                   # end group
                    # a space
(?:                 # non-capturing group
  19[7-9]\d|2\d{3}  # 1970-2999
)                   # end group
(?=\D|$)            # followed by: anything but a digit or the end of string

答案 1 :(得分:20)

我必须在这方面努力匹配一些边缘的例子,但我最终使用

(\b\d{1,2}\D{0,3})?\b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|(Nov|Dec)(?:ember)?)\D?(\d{1,2}\D?)?\D?((19[7-9]\d|20\d{2})|\d{2})

以日期为单位捕捉日期

答案 2 :(得分:1)

修改Beerswiller的答案,如果你想要“st”/“nd”/“rd”变种:

(\b\d{1,2}\D{0,3})?\b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|(Nov|Dec)(?:ember)?)\D?(\d{1,2}(st|nd|rd|th)?)?(([,.\-\/])\D?)?((19[7-9]\d|20\d{2})|\d{2})*

答案 3 :(得分:0)

此正则表达式说明了逗号之间的一些间距。

有时候并不总是在正确的地方。

((\b\d{1,2}\D{0,3})?\b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|(Nov|Dec)(?:ember)?)\D?)(\d{1,2}(st|nd|rd|th)?)?((\s*[,.\-\/]\s*)\D?)?\s*((19[0-9]\d|20\d{2})|\d{2})*
相关问题