2017-04-13 51 views
0

我正在編寫一個函數,它將使用Python中的正則表達式從計劃中提取不同的時間。下面是使用BeautifulSoup,我從網站得到時間表的一個例子:00-18:使用正則表達式從計劃中提取時間的麻煩

與discussion17互動談話00紀錄片「佔領隔子」 我們呈現給您塔克西姆蓋齊公園抵制了所有的方式;白天和晚上 ,具有良好的側面和壞sides18.00 - 19:00詩人瑪麗亞麪包車 Daalen '海天Vodoo',詩人從Querido publishers19:00 Food20:30-22:30

如上圖所示,輸入文本的開始時間有無結束時間。將分鐘與小時分開時,使用「:」或「。」也不一致。

使用regex101,我已經做了以下(非常醜陋)的正則表達式,這似乎在所有不同的時間工作:\d\d[:|.]\d\d(\s*.\s*\d\d[:|.]\d\d)?

要搜索我使用下面的代碼Python的文字:

def extract_times(string): 
    list_of_times = re.findall('\d\d[:|.]\d\d(\s*.\s*\d\d[:|.]\d\d)?', string) 
    return list_of_times 

然而,當我把示例文本從上面這個函數,它返回:

['-18:00', ' - 19:00', '', '-22:30'] 

我預計像[’17:00-18:00’], [’19:00’]

我做錯了什麼?

+1

我不知道pyton,但認爲捕獲組的問題。試試這個'(\ d \ d [:|。] \ d \ d(?:\ s * - \ s * \ d \ d [:|。] \ d \ d)?)' – splash58

+0

IT WORKED !!非常感謝你!!! – nieknel

回答

0

使用這一個:\d{1,2}[:.]([\d\s-]+[:.])?\d{2}}

說明

\d{1,2}一個或兩個數字匹配1:00和01:00

[:.]匹配18:00至18.00

[\d\s-]+n digit,whitespace or dash (optiona L)

[:.]\d{2}匹配18:00至18.00 (可選)

\d{2} 2位

在您的示例文本,下面將匹配(使用全場比賽):

火柴1 17:00-18:00 第2場18.00 - 19:00 第3場19:00 第4場20:30-22:30

Demo

+0

謝謝您的回答! – nieknel