我正在创建一个正则表达式来匹配字符串中的日期和时间。字符串是
“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”
如何扩展它以获得一个字符串的时间?
答案 0 :(得分:3)
使用re.findall
函数返回匹配字符串列表。在正则表达式{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'
答案 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