使用正则表达式从计划中提取时间的麻烦

时间:2017-04-13 20:43:12

标签: regex python-2.7

我正在编写一个函数,它将使用Python中的正则表达式从日程表中提取不同的时间。以下是我使用BeautifulSoup从网站获得的时间表示例:

  

互动谈话17:00-18:00纪录片'占领格子'   我们向您展示Taksim Gezi公园抵制各种方式;一天和   晚上,有好的一面和坏的方面18.00 - 19:00 Poet Maria van   Daalen'Haitian Vodoo',来自Querido出版社的诗人19: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 个答案:

答案 0 :(得分:0)

使用这个:\d{1,2}[:.]([\d\s-]+[:.])?\d{2}}

<强>解释

\d{1,2}一位或两位数字,以匹配1:00和01:00

[:.]匹配18:00和18.00

[\d\s-]+ n 数字,空格或短划线(可选)

[:.]\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