从文本中缩短工作日

时间:2012-12-13 14:46:44

标签: python regex datetime formatting python-2.7

我正在编写一个python库,它包含一个由不同类型的小时格式组成的paragrah。段落实际上来自不同的餐馆网站,他们每个网站都有各种格式的营业时间。所以,我决定写一个采用任何格式的库(例如:M-Fri 10am - 12pm,M,Tue,Wed 00:00-18:00等)。我的决定是编写一组不同的RegEx,它接受一个字符串,如果它匹配我的任何模式,则继续。

我选择了RegEx模式匹配,因为不是为每个模式编写自己的逻辑而只是使用str.replace替换可能需要花费很多时间。但是因为我是新手,所以我坚持使用正则表达式。所以你们中的任何人都可以建议我如何完成以下任务?

作为第一步,我想将所有工作日格式缩短为3个字母缩短工作日,如下所示。 例: “周一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点至下午5点,周六休息,周日休息

输出应该是 “星期一 09:00 AM - 5:00 PM,星期二 09:00 AM - 5:00 PM,星期三 09:00 AM - 下午5:00,星期四 09:00 AM - 5:00 PM,星期五 09:00 AM - 5:00 PM,星期六关闭,太阳已关闭“

感谢。

2 个答案:

答案 0 :(得分: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)

当然,对于日历,缩写/ etc依赖于语言环境(但也许这是可取的)

答案 1 :(得分:0)

尝试使用此模式:([a-zA-Z] {3})[a-zA-Z] +([0-9] |已关闭) 而这个替代品:$ 1 $ 2