我想在此字符串中捕获两次
u'11:00 a.m. - 6:00 p.m.'
#ideally to
('11:00', 'a.m'), (6:00,)
现在,我有
(\d{1,2}:\d{2})\s(\w\.\w).+(\d{1,2}:\d{2})\s(\S+)
# result
[u'11:00', u'a.m', u'6:00', u'p.m.']
我猜这是好的。但正则表达式不是我的超级大国之一,我想知道是否有更好的方法从这个字符串中捕获信息。
编辑:我强调更好的正则表达式,而不是将列表重新排列为所需的元组。
答案 0 :(得分:3)
为什么不简单地根据-
分割字符串然后:
# first part
'11:00 a.m.'.replace('a.m.', 'AM')
# second part (after split you'll have it as a variable and not hardcoded)
'11:00 p.m.'.replace('p.m.', 'PM')
然后简单地说:
datetime.strptime(first_date, '%H:%M %p')
datetime.strptime(second_date, '%H:%M %p')
您还可以使用arrow
模块(pip install arrow
):
a = arrow.get('11:12 AM', 'HH:mm A')
现在所有信息都可用:
a.hour
>>> 11
a.minute
>>> 12
有关详细信息,请参阅documentation。
答案 1 :(得分:2)
将findall方法与此模式一起使用:
re.findall(r'(\d{1,2}:\d\d)\s([ap]\.m\.)', yourstring)
答案 2 :(得分:0)
这不是更好的方式,没有更好的方法,但你可以做到这一点
x = u'11:00 a.m. - 6:00 p.m.'.split()
del x[2]