Python 从文本缩短工作日

Python 从文本缩短工作日,python,regex,datetime,formatting,python-2.7,Python,Regex,Datetime,Formatting,Python 2.7,我正在编写一个python库,它采用了由不同类型的hours格式组成的paragrah。这段文字实际上取自不同的餐厅网站,每个网站都有不同形式的营业时间。所以,我决定写一个可以采用任何格式的库(例如:M-Fri上午10点到下午12点,M,周二,周三00:00-18:00等)。我的决定是编写不同的正则表达式集,它接受一个字符串,如果它与我的任何模式匹配,则继续执行 我选择了正则表达式模式匹配,因为它不是为每个模式编写自己的逻辑,而只是使用str.replace进行替换,这可能需要很多时间。但由于我

我正在编写一个python库,它采用了由不同类型的hours格式组成的paragrah。这段文字实际上取自不同的餐厅网站,每个网站都有不同形式的营业时间。所以,我决定写一个可以采用任何格式的库(例如:M-Fri上午10点到下午12点,M,周二,周三00:00-18:00等)。我的决定是编写不同的正则表达式集,它接受一个字符串,如果它与我的任何模式匹配,则继续执行

我选择了正则表达式模式匹配,因为它不是为每个模式编写自己的逻辑,而只是使用str.replace进行替换,这可能需要很多时间。但由于我对regex还不熟悉,所以我一直坚持使用它。所以你们中的任何人都可以建议我如何做下面的任务

作为第一步,我想将所有的工作日格式缩短为3个字母,每周缩短天数如下。 例子: 周一上午9:00-下午5:00,周二上午9:00-下午5:00,周三上午9:00-下午5:00,周四上午9:00-下午5:00,周五上午9:00-下午5:00,周六休息,周日休息

输出应该是 “周一上午09:00-下午5:00,周二上午09:00-下午5:00,周三上午09:00-下午5:00,周四上午09:00-下午5:00,周六关闭,太阳关闭”

谢谢。

这里似乎有一个简单的解决方案:

new_paragraph = paragraph.replace('Monday','Mon')
您甚至可以使用该模块来简化此过程:

import calendar

for day,abbr in zip(calendar.day_name,calendar.day_abbr):
    paragraph = paragraph.replace(day,abbr)

对于非常大的段落,可能值得切换到regex:

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)
当然,对于calendar,缩写/etc取决于语言环境(但无论如何这可能是可取的)

尝试以下模式:([a-zA-Z]{3})[a-zA-Z]+([0-9]|关闭)
这个替换:$1$2

我试过string.replace,但应该反复做。我喜欢用一个正则表达式来替换所有的缩写格式。我很想知道-使用正则表达式不会做你想避免的事情吗?不是每场比赛都要一遍又一遍地进行吗?如果是这样的话,使用正则表达式就不是您想要采取的方法。这很难看,维持下去会很痛苦。mgilsons的答案看起来是最好的解决方案。@谢谢,我从MorganBormanNeeds得到的解决方案是段落=段落。替换(day,缩写)@MorganBorman--谢谢。我使用了re.sub和ignore case,这样我就可以替换,而不必考虑当天应该大写。“周一”=>“周一”,但“周一”不会产生“周一”。因此,re.sub优于replace