我有多个字符串。以下是三个代表性的例子:
1. Fridays, Saturdays, 7:30 a.m.-12:45 p.m.
2. Mondays, Wednesdays, Fridays, 9:30 a.m.
3. Mondays, Thursdays-Saturdays, 7:30-10:30 p.m.
我想要做的是创建一个与前两个字符串匹配的正则表达式(包括的时间,我已经写过),但不是第三个。唯一的主要区别是第三个字符串包含一个日期范围(Thursdays-Saturdays
) - 即它包含一个连字符b / w天数。
我尝试过但未能使用外观完成此操作 - 我相信based on what I've read看起来是正确的工具(至少对于python)。这就是我所拥有的(live demo here) - 但它匹配所有内容而不仅仅是前两个字符串:
[MTWFS]\w.*days,\s1?\d(?::\d\d)?(?:\s[ap]\.m\.)?(?:-1?\d(?::\d\d)?(?:\s[ap]\.m\.))?
我真的尝试过我能想到的每一个可想到的迭代。我根本无法弄清楚如何匹配" Days,Days,[重复" Days,"无论多少次,时间"范式 - 我认为这很简单,因为我对正则表达式很新,而且看起来很基本。谢谢你的帮助!
答案 0 :(得分:2)
由于您要排除包含日期范围的字符串(例如Thursdays-Saturdays
)并且不担心捕获每个字符串的某些部分,您可以使用否定前瞻来执行此操作。
^(?!.*(?:Mon|Tues|Wednes|Thurs|Fri|Satur|Sun)days-).+$
答案 1 :(得分:1)
以下正则表达式:
^(?:(?:Mon|Tues|Wednes|Thurs|Fri|Satur|Sun)days,\s*)+\d{1,2}:\d\d [ap]\.m\.(?:-\d{1,2}:\d\d [ap]\.m\.)?$
它匹配一系列日期名称,后跟逗号和可选空格,然后是一次或两次用-
分隔。
答案 2 :(得分:1)
对于工作日部分,我会写出所需的日子,所以有趣的价值观(如Suburbandays
)不会偷偷溜进去:
^(?:(?:(?:Mon|Tues|Wednes|Thurs|Fri|Satur|Sun)days,\s*)+)
我还会尝试验证时间(因此13:00 a.m.
被拒绝):
((?:-?(?:[1-9]:|1[012]:)(?:[0-5]\d)\s*[ap]\.m\.){1,2})