首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >排除基于单个字符差异的字符串匹配

排除基于单个字符差异的字符串匹配
EN

Stack Overflow用户
提问于 2014-08-22 21:24:12
回答 3查看 28关注 0票数 0

我有多根绳子。以下是三个有代表性的例子:

代码语言:javascript
复制
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来说是这样)。下面是我所拥有的(现场演示) --但是它匹配所有的东西,而不仅仅是前两个字符串:

代码语言:javascript
复制
[MTWFS]\w.*days,\s1?\d(?::\d\d)?(?:\s[ap]\.m\.)?(?:-1?\d(?::\d\d)?(?:\s[ap]\.m\.))?

我真的试过了我能想到的每一次迭代。我只是想不出如何匹配“天,天”,重复“天”,无论多少次,时间“范式--所以我认为它很简单,因为我对regex非常陌生,而且它看起来相当基本。谢谢你的帮助!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-22 21:35:34

下面的regexp会这样做:

代码语言:javascript
复制
^(?:(?:Mon|Tues|Wednes|Thurs|Fri|Satur|Sun)days,\s*)+\d{1,2}:\d\d [ap]\.m\.(?:-\d{1,2}:\d\d [ap]\.m\.)?$

它匹配一系列的天名,后面跟着逗号和可选空格,然后用-隔开一次或两次。

演示

票数 1
EN

Stack Overflow用户

发布于 2014-08-22 21:48:01

由于您希望排除包含日范围(例如Thursdays-Saturdays)的字符串,并且不担心捕获每个字符串的某些部分,因此可以使用负查找来实现这一点。

代码语言:javascript
复制
^(?!.*(?:Mon|Tues|Wednes|Thurs|Fri|Satur|Sun)days-).+$

工作演示

票数 2
EN

Stack Overflow用户

发布于 2014-08-22 21:56:09

对于平日部分,我会写出想要的日子,这样有趣的值(比如Suburbandays)就不会偷偷地出现在那里了:

代码语言:javascript
复制
^(?:(?:(?:Mon|Tues|Wednes|Thurs|Fri|Satur|Sun)days,\s*)+)

我还会尝试验证时间(因此13:00 a.m.被拒绝了):

代码语言:javascript
复制
 ((?:-?(?:[1-9]:|1[012]:)(?:[0-5]\d)\s*[ap]\.m\.){1,2})

原始regex101演示以及一个更新的regex101演示 (带有内联注释)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25455739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档