Python正则表达式 - 从字符串中获取时间戳

时间:2016-08-02 14:26:46

标签: python regex python-2.7

我正在使用Python 2.7

我有一个字符串,其形式类似于:

A: u'As of 9:30 AM EDT. 
B: u'As of 10:15 AM EDT. 
C: u'As of 4:30 PM EDT. 

这是我的代码:

import re

pat= u'[0-9]?[1-9]{1}:[0-9]{2}\s[A|P]M'
rxc = re.compile(pat)

s = grok_date_string()

matches = re.findall(rxc, s)

我的代码无法匹配B.为什么?!

3 个答案:

答案 0 :(得分:0)

小时的第二位数可能不是0,只有1-9。因此,您的代码将匹配11:15 AM但不匹配10:15 AM

替换正则表达式
'[0-9]?[0-9]{1}:[0-9]{2}\s[A|P]M'

它应该有用。

您甚至可以使用

进一步简化它
'[0-9]{1,2}:[0-9]{2}\s[A|P]M'

答案 1 :(得分:0)

以下是示例中的link

import re

pat = re.compile(r'(\d{1,2}:\d{2}\s(?:AM|PM))')
results = re.findall(pat, YOUR_STRING)
# matches HH:MM AM/PM

答案 2 :(得分:0)

问题在于第二个数字,由正则表达式限制在1-9范围内,这与第二个例子不符。

可能的正则表达式可能是:[01]?[0-9]:[0-5][0-9]\s[AP]M

注意:您不需要将|字符放在方括号之间(就像您匹配AM / PM一样);方括号内的所有字符都自动进行OR运算。