我有多根绳子。以下是三个有代表性的例子:
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 --天本身。
我试着用基于我所读到的来完成它,但是我相信它是正确的工具(至少对于python来说是这样)。下面是我所拥有的(现场演示) --但是它匹配所有的东西,而不仅仅是前两个字符串:
[MTWFS]\w.*days,\s1?\d(?::\d\d)?(?:\s[ap]\.m\.)?(?:-1?\d(?::\d\d)?(?:\s[ap]\.m\.))?我真的试过了我能想到的每一次迭代。我只是想不出如何匹配“天,天”,重复“天”,无论多少次,时间“范式--所以我认为它很简单,因为我对regex非常陌生,而且它看起来相当基本。谢谢你的帮助!
发布于 2014-08-22 21:35:34
下面的regexp会这样做:
^(?:(?:Mon|Tues|Wednes|Thurs|Fri|Satur|Sun)days,\s*)+\d{1,2}:\d\d [ap]\.m\.(?:-\d{1,2}:\d\d [ap]\.m\.)?$它匹配一系列的天名,后面跟着逗号和可选空格,然后用-隔开一次或两次。
演示
发布于 2014-08-22 21:48:01
由于您希望排除包含日范围(例如Thursdays-Saturdays)的字符串,并且不担心捕获每个字符串的某些部分,因此可以使用负查找来实现这一点。
^(?!.*(?:Mon|Tues|Wednes|Thurs|Fri|Satur|Sun)days-).+$发布于 2014-08-22 21:56:09
对于平日部分,我会写出想要的日子,这样有趣的值(比如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})原始regex101演示以及一个更新的regex101演示 (带有内联注释)。
https://stackoverflow.com/questions/25455739
复制相似问题