我正在编写一个函数,它将使用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’]
之类的东西。
我做错了什么?
答案 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