正则表达式匹配日期和时间

时间:2015-02-15 15:45:53

标签: python regex

我正在创建一个正则表达式来匹配字符串中的日期和时间。字符串是

“Giaobónglúc01:00Ngày20/ 02/2015”

我想提取日期和时间。

我创建正则表达式来提取日期:

date_match = re.search(r'(\d+/\d+/\d+)',a['title'])
date = date_match.group(1)

现在的输出是:“2015年2月20日” 我还需要另一个变量“01:00”

如何扩展它以获得一个字符串的时间?

3 个答案:

答案 0 :(得分:3)

使用re.findall函数返回匹配字符串列表。在正则表达式{n}中称为范围量词,它恰好重复前一个令牌n次。 {n,m}重复从nm次的上一个令牌。这里我们使用第一个表单\d{4},它恰好匹配4位数字符。 \b称为单词边界,它在单词字符和非单词字符之间匹配。

>>> s = "Giao bóng lúc 01:00 Ngày 20/02/2015"
>>> re.findall(r'\b\d{2}/\d{2}/\d{4}\b|\b\d{2}:\d{2}\b', s)
['01:00', '20/02/2015']

只有在知道时间位置,日期子串的情况下才可以使用re.search函数。

>>> re.search(r'\b(\d{2}:\d{2})\b.*?\b(\d{2}/\d{2}/\d{4})\b', s).group(1)
'01:00'
>>> re.search(r'\b(\d{2}:\d{2})\b.*?\b(\d{2}/\d{2}/\d{4})\b', s).group(2)
'20/02/2015'

答案 1 :(得分:1)

您可以使用.*。它表示任何符号。如果所有行看起来像示例行,则此代码将起作用:

import re
matcher = re.compile(r".* (\d{2}:\d{2}) .* (\d{2}/\d{2}/\d{2})")

m = matcher.match(line)
if m:
   print m.group(1). m.group(2)

答案 2 :(得分:0)

如果时间和日期总是第三个最后和最后一个元素:

s = "Giao bóng lúc 01:00 Ngày 20/02/2015"
spl = s.rsplit(None,3)
tme, dte = spl[-3], spl[-1]
print(tme, dte) 
01:00 20/02/2015

如果他们是你可以看到只是拆分更有效:

In [33]: %%timeit
m = matcher.match(line)
m.group(1), m.group(2)
   ....: 
1000000 loops, best of 3: 1.08 µs per loop

In [35]: %%timeit                                    
spl = line.split()
tme, dte = spl[-3], spl[-1]
   ...: 
1000000 loops, best of 3: 354 ns per loop