2012-12-13 75 views
-2

我正在寫一個需要由不同類型的小時格式組成的paragrah的python庫。段落實際上來自不同的餐館,它們每個站點都有不同格式的操作時間。所以,我決定寫一個圖書館,它採用任何格式(例如:M-Fri 10am - 12pm,M,Tue,Wed 00:00-18:00等)。我的決定是編寫不同的RegEx集合,它接受一個字符串,如果它匹配我的任何模式,則繼續。從文本中縮短工作日

我選擇了RegEx模式匹配,因爲不是爲每個模式編寫自己的邏輯,而只是使用str.replace替換可能需要很多時間。但我堅持正則表達式,因爲我是新手。所以你們中的任何一個人都可以向我建議我如何執行以下任務?

作爲第一步,我想縮短所有星期幾的格式,縮短爲3個字母縮短的星期幾天,如下所示。例如: 「星期一上午9:00 - 下午5:00,週五09:00 AM - 5:00 PM,星期六休息,星期日休息

輸出應該 」 週一 09:00 AM - 5:00 PM,週二 09:00 AM - 5: 00 PM,週三 09:00 AM - 5:00 PM,週四 09:00 AM - 5:00 PM,週五 09:00 AM - 5:00 PM,週六封閉,Sun已關閉「

謝謝。

+0

我試過string.replace,但應該反覆做。我喜歡用一個正則表達式來將它們全部替換爲縮短的格式。 – Garfield

+0

我很想知道 - 不會使用正則表達式做同樣的事情,你試圖避免?每場比賽都不會一遍又一遍嗎?如果是這樣,使用正則表達式不是你想要採取的方法。這是醜陋的,可能是一個難以維持。 mgilsons答案看起來像最好的解決方案。 – spots

+0

@spots謝謝,我從MorganBorman得到的解決方案 – Garfield

回答

5

似乎是一個簡單str.replace應該在這裏工作:

new_paragraph = paragraph.replace('Monday','Mon') 

您甚至可以使用calendar模塊,使這個更容易一些:

import calendar 

for day,abbr in zip(calendar.day_name,calendar.day_abbr): 
    paragraph = paragraph.replace(day,abbr) 

真的大段落,它可能是值得切換到正則表達式:

import re 
import calendar 

regex = re.compile('|'.join(calendar.day_name)) 
sub_dict = dict(zip(calendar.day_name,calendar.day_abbr)) 
new_paragraph = regex.sub(lambda match: sub_dict[match.group(0)],paragraph) 

當然,帶日曆的縮寫/等是與當前位置有關的(但也許這是可取的反正)

+1

需要爲 paragraph = paragraph.replace(day,abbr) –

+0

@MorganBorman - 謝謝。大腦翻牌。 – mgilson

+0

Thanks @MorganBorman – Garfield

0

嘗試使用這種模式:([A-ZA-Z] {3})[A-ZA -Z] +([0-9] |)關閉) 和這個更換:$ 1 $ 2