2015-04-02 178 views
1

我试图用正则表达式匹配日期格式。每一个实例日期是:正则表达式在Python中匹配非数值或字符串结尾

02 Apr 15 
02 Apr 2015 

我使用匹配的第一个正则表达式是:

re.compile("([0-9]{2}) ([A-Z][a-z]{2}) ([0-9]{2})") 

而对于第二:

re.compile("([0-9]{2}) ([A-Z][a-z]{2}) ([0-9]{4})") 

现在的问题我尽管它包含4位数字而不是2,但第二个日期将匹配第一个正则表达式。我想为正则表达式添加行尾,但有时候会有时间附加到它(即4: 32)。所以我想要做的就是让第一个正则表达式匹配相应的日期,并且在它之后没有任何东西或者后面有空格+东西。因此,第一个应该匹配:

"02 Apr 15" 
"02 Apr 15 5:23" 

但不匹配:

"02 Apr 2015" 
"02 Apr 2015 5:23" 

应当以失败告终的其他正则表达式。所以,非常重要的是,唯一重要的值是前3(dd mmmm yy和ddmmmm yyyy)。

回答

0

你要找的是什么字边界即:

re.compile("\\b([0-9]{2}) ([A-Z][a-z]{2}) ([0-9]{2})\\b") 

这将确保4位数的年份是不匹配的,而试图在你的例子匹配的第一次约会。

但是你应该考虑Python date parse routine

+1

太棒了!我现在要添加正则表达式代码,因为它遵循很多脚本的写法。尽管如此,我一定会更深入地分析解析。如果它能使脚本更好,我会做到的。 – user2869231 2015-04-02 14:52:03