3

我有包含时间的字符串,我想将时间格式化为 12 小时格式。

我试过,

pat1 = "(\d+):(\d+)?\s*pm"
pat1 = "(\d+):(\d+)?\s*am"
hooString = "673 HOO: Mon. 7:30 am - 6pm, Tue. 7:30am - 6 pm, Wed. 7:30 am - 6 pm, Thurs. 7:30 am - 6 pm, Fri. 8 am - 5 pm,"
hooString  = sub(compile(pat1, IGNORECASE), "\1:\2 AM", hooString)
hooString  = sub(compile(pat2, IGNORECASE), "\1:\2 PM", hooString)
print hooString

我得到了输出,

673 HOO: Mon. 7:30 AM - 6pm, Tue. 7:30 AM - 6 pm, Wed. 7:30 AM - 6 pm, Thurs. 7:30 AM - 6 pm, Fri. 8 am - 5 pm,

但我还要求将“8am or 8 am”替换为“8 AM”,所以我将正则表达式稍微更改为

pat1 = "(\d+):?(\d+)?\s*am"
pat2 = "(\d+):?(\d+)?\s*pm"

它向我抛出了“无与伦比的组”异常。因为输入字符串中不存在第二组。

对于“%H:%M %P”和“%H %p”这两个条件,我怎样才能毫无例外地得到我的预期结果

此外,如果我能将“8 am”的结果设为“8:00 AM”,那可能是最好的答案。

4

1 回答 1

7

为什么首先有两个组?

pat1 = r"(\d+(?:[:]\d+)?)\s*am"
pat1 = r"(\d+(?:[:]\d+)?)\s*pm"

请注意使用原始字符串。否则,您可能会遇到转义问题。

我做了什么?我只是把整个时间都塞进一个组中,并使其成为:\d+可选的(与一个非捕获组)。替换当然是\1 AMand \1 PM

于 2012-12-17T12:13:02.447 回答