我正在使用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.为什么?!
答案 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运算。