-3

可能重复:
python 正则表达式,日期格式

我正在编写一个正则表达式来查找所有日期,例如“6 月 27 日”

同时我只想要 2012 年的“6 月 27 日”,而不是其他任何一年

所以“June 27th, 2007”中的“June 27th”不应该被找到,但正则表达式确实捕捉到了“June 27”

正则表达式编写如下,

((?<!\w)(january|february|march|april|may|june|july|august|september|october|november|december|jan|feb|mar|apr|may|jun|jul|aug|sep|sept|oct|nov|dec)[\.]?\s{1,3}?((?<!(\d|:))(1[0-9]|2[0-9]|3[0-1]|0?[1-9])(st|nd|rd|th)?(?!(\d|\s{0,3}am|s\{0,3}pm|:)))(\s{0,2},?\s{0,2}(2012))?(?!(\d|\s{0,4},?\s{0,2}(1\d\d\d|200\d|2010|2011))))

如果我去掉“27th”中的“th”,则正则表达式有效,即它不会捕获日期字符串。

任何人都可以帮忙吗?

4

1 回答 1

0

假设您的所有日期都在您给定的语法中,一个简单的正则表达式将是:

/^([^\d\s]+?)\s*(\d+)[stndrh]+,\s*2012$/

第一个捕获组以语言或缩写形式捕获月份,第二个捕获组保存月份中的日期。

或者,如果您必须匹配长文本中的所有内容,请尝试以下操作:

/(?:([a-z]{3,9})\s*(\d{1,2})[stndrh]{2},\s*2012)/

相同的捕获,但正则表达式更具限制性,因此它不会意外匹配不需要的结果。

于 2012-08-14T12:26:06.800 回答