2012-12-17 40 views
3

我有字符串組成的時間,我想格式化時間爲12小時格式。Python:無與倫比的組異常

我試過,

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, 

但我需要「早上8點或8點」也被替換爲「上午8點」,所以我稍微改變正則表達式爲

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

它引發了我「無與倫比的組」異常。因爲第二組在輸入字符串中不存在。

我如何能得到我預期的結果無一例外的兩個條件「%H:%M%P」以及「%H%P」

而且如果我能得到「上午8點的結果「作爲」上午8點「,這可能是最好的答案。

回答

7

爲什麼有兩組呢?

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

請注意使用原始字符串。否則,您可能會遇到轉義問題。

我做了什麼?我只是把整個時間都塞進一個小組,並且讓:\d+可選(與一個非捕獲組)。替換當然是\1 AM\1 PM

+0

謝謝工作很好。任何可能性使凌晨5點到凌晨5點。也就是說,如果它的四捨五入時間我想分鐘爲00. – Garfield

+1

@flower也許第二遍。你不能有條件地讓魔法字符出現在替換字符串中。 (或者你將不得不使用帶有替換回調的're.sub') –

+0

謝謝我將使用替換回調。 – Garfield