Gar*_*eld 3 regex replace python-2.7
我有字符串组成的时间,我想将时间格式化为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
Run Code Online (Sandbox Code Playgroud)
我得到了输出,
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,
Run Code Online (Sandbox Code Playgroud)
但我要求"早上8点或早上8点"也被替换为"8 AM",所以我稍微改变了正则表达式
pat1 = "(\d+):?(\d+)?\s*am"
pat2 = "(\d+):?(\d+)?\s*pm"
Run Code Online (Sandbox Code Playgroud)
它抛出了我"无与伦比的群体"的例外.因为输入字符串中不存在第二组.
对于条件"%H:%M%P"以及"%H%p",我怎么能毫无例外地得到我的预期结果
另外如果我能得到"上午8点"的结果为"上午8点",这可能是最好的答案.
为什么首先要有两个小组?
pat1 = r"(\d+(?:[:]\d+)?)\s*am"
pat1 = r"(\d+(?:[:]\d+)?)\s*pm"
Run Code Online (Sandbox Code Playgroud)
注意使用原始字符串.否则你可能会遇到转义问题.
我做了什么?我把整个时间都塞进一个组中,然后:\d+选择(使用非捕获组).替换当然是\1 AM和\1 PM.
| 归档时间: |
|
| 查看次数: |
2077 次 |
| 最近记录: |