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

Python 正则表达式匹配日期和时间,python,regex,Python,Regex,我正在创建一个正则表达式来匹配字符串中的日期和时间。字符串是 “Giao bóng lúc 01:00 ngáy 20/02/2015” 我想提取日期和时间 我创建正则表达式以提取日期: date_match = re.search(r'(\d+/\d+/\d+)',a['title']) date = date_match.group(1) 现在的输出为:“20/02/2015” 我还需要另一个变量“01:00” 如何扩展它以获得一个字符串的时间?使用re.findall函数返回匹配字符串的

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

“Giao bóng lúc 01:00 ngáy 20/02/2015”

我想提取日期和时间

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

date_match = re.search(r'(\d+/\d+/\d+)',a['title'])
date = date_match.group(1)
现在的输出为:“20/02/2015” 我还需要另一个变量“01:00”


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

使用
re.findall
函数返回匹配字符串的列表。在regex
{n}
中,称为范围量词,它精确地重复前面的标记n次
{n,m}
将上一个标记从
n
重复到
m
次。这里我们使用了第一种形式,
\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'

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

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)

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

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

添加预期输出可能的测量值副本有点棘手:),因为您比较了拆分和未编译的regexp。我确信编译占用了大部分时间。@Jimilian,在我的Mac上它仍然会快很多:0976µs/循环(分割)比1.13µs/循环(编译匹配)。@Jimilian,不确定你用什么计时,但在我的machineCool上仍然慢了近3倍。现在我知道我的分裂非常缓慢:(