如何正则表达式不同的开放时间格式?

How to regex different opening hours formats?

在我的数据库中,我有几种开放时间格式:

Mo, Di, Do, Fr 10:00-19:00, Mi 09:30-19:00, Sa 10:00-18:30
Mo-Fr 10:00-18:00, Sa 10:00-15:00, So 11:00-17:00
Mo - Fr 10:00 - 19:00, Sa 10:00 - 18:00
Mo-Mi 9:30-20:00, Do-Sa 9:30-22:00
Mo-Sa 09:00-20:00

我想要做的是对这种格式进行正则表达式,接下来我将能够将其存储在列表或地图中。 主要原因是将此对象转移到新的 Table,这是用示例条目定义的:

+----+--------+-------------+-------+-------+---------+---------+
| ID | ENTITY | DAY_OF_WEEK | OPEN  | CLOSE | CREATED | UPDATED |
+----+--------+-------------+-------+-------+---------+---------+
|  1 | 1 <FK> |           1 | 36000 | 72000 | <date>  | <date>  |
|  2 | 1 <FK> |           2 | 28800 | 43200 | <date>  | <date>  |
|  3 | 1 <FK> |           2 | 50400 | 72000 | <date>  | <date>  |
+----+--------+-------------+-------+-------+---------+---------+

我想从实际格式中得到的可能是一张地图Map<String, List<String>>,其中键是营业时间,值是字符串天数的列表。

首先,您可以使用

删除所有空格
s.replaceAll(" ", "");

然后你可以用一个数字前面的逗号分割字符串:

s.split("(?<=\d),");

然后,对于您在上一步中获得的数组的每个元素,您可以使用此正则表达式将信息分成天数部分和小时数部分:

(.*?)(\d{1,2}:\d{2})-(\d{1,2}:\d{2})

第 1 组将包含天数,第 2 组 - 开放时间,第 3 组 - 关闭时间。 那你可以试试用days来分析部分:

  • 如果它包含一个逗号,然后用逗号分隔,你会得到天数列表

  • 如果它包含 -,则除以 -,您将得到一周的开始和结束日期