编写正则表达式,更好的解决方案

时间:2014-12-01 13:00:46

标签: python regex

我想在此字符串中捕获两次

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.']

我猜这是好的。但正则表达式不是我的超级大国之一,我想知道是否有更好的方法从这个字符串中捕获信息。

编辑:我强调更好的正则表达式,而不是将列表重新排列为所需的元组。

3 个答案:

答案 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]