Skip to main content
 首页 » 编程设计

python之日期 : British: day-month-year 的 Python 正则表达式

2024年10月24日31insus

我正在尝试使用 python 编写一个 REGEX 来根据(英式:day-month-year)识别日期。

我写了一些随机字符串,如下所示。

string='these are just rubbish 01-13- 00-00- 44-44- 11-2-2222 24-3-1695abc 12-13-1111 32/11/2000\ 
        these are actual dates -- 4-02-2011 12/12/1990 31-11-1690  11 July 1990 7 Oct 2012\ 
        these are actual deal-- by 12 December six people died and  by 18 Nov 19902.00 dollar was spent\ 
        anomalies -- are he gave June 2000 bucks in 5 July. The shares rose 5% on 5 November 1999.' 
 
re.findall('(\ 
([1-9]|0[1-9]|[12][0-9]|3[01])\ 
[-/\s+]\ 
(1[1-2]|0[1-9]|[1-9]|Jan|January|Feb|February|Mar|March|Apr|April|May|Jun|June|Jul|July|\ 
Aug|August|Sept|September|Oct|October|Nov|November|Dec|December)\ 
[-/\s+]\ 
(1[0-9]\d\d|20[0-2][0-5])\ 
[^\da-zA-Z])', string) 

我得到的输出如下:

[('2/11/2000 ', '2', '11', '2000'), 
 ('4-02-2011 ', '4', '02', '2011'), 
 ('12/12/1990 ', '12', '12', '1990'), 
 ('31-11-1690 ', '31', '11', '1690'), 
 ('11 July 1990 ', '11', 'July', '1990'), 
 ('7 Oct 2012 ', '7', 'Oct', '2012'), 
 ('5 November 1999.', '5', 'November', '1999')] 

正则表达式格式似乎有效,但是,正则表达式无法识别的日期很少:

by **12 December** six people 
by **18 Nov** 19902.00 dollar 

如何修改正则表达式,使其也能识别上述日期。

请您参考如下方法:

您要问的是将年份设为可选。所以你应该用可选的非捕获包围你的年份部分 [-/\s+](1[0-9]\d\d|20[0-2][0-5])群组:

(?:[-/\s+](1[0-9]\d\d|20[0-2][0-5]))?

此外,它匹配 2/11/2000,这是第一行中“垃圾”日期的一部分。以 \b 开始正则表达式,以确保它从单词边界开始。