我正在编写一个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,星期六关闭,太阳已关闭“
感谢。
答案 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