-2

我正在编写一个 python 库,它采用由不同类型的小时格式组成的段落。段落实际上取自不同的餐厅网站,每个网站都有不同格式的营业时间。因此,我决定编写一个采用任何格式的库(例如:M-Fri 10am-12pm、M、Tue、Wed 00:00-18:00 等)。我的决定是编写不同的正则表达式集,它接受一个字符串,如果它与我的任何模式匹配则继续。

我选择了 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 AM - 5:00 PM,周六休息,周日休息

输出应为“周一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 AM - 5:00 PM,周六闭馆,周日闭馆”

谢谢。

4

2 回答 2

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)

当然,对于日历,缩写/等取决于语言环境(但无论如何这也许是可取的)

于 2012-12-13T14:51:00.820 回答
0

试试这个模式: ([a-zA-Z]{3})[a-zA-Z]+( [0-9]| Closed) 和这个替换: $1$2

于 2012-12-13T14:56:11.477 回答