首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >其中任何一组必须是强制性的

其中任何一组必须是强制性的
EN

Stack Overflow用户
提问于 2014-03-20 13:06:22
回答 3查看 110关注 0票数 0

假设我有一个字符串

代码语言:javascript
复制
Q2

有许多与此字符串相关的变体,如

代码语言:javascript
复制
Q2
Quarter two
Quarter 2
2-Q
2.Q
Q.2
Q-2
Second Quarter 

等。

我的判罚是

代码语言:javascript
复制
((2)|(second))*\W*((q)|(quarter))\W*((2)|(second)|(two))*

如果只有"q“或”四分之一“正则表达式,则匹配。

我希望任何一个团体(1或7)都是强制性的。

我怎么能这么做?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-20 13:23:14

也许您可以尝试使用一个条件组(并简化正则表达式,我认为这样可以使其更易读!):

代码语言:javascript
复制
(2|second)?[^\w\n]*(quarter|q)[^\w\n]*(?(1)|(2|second|two))

有条件组是指:

代码语言:javascript
复制
(?(1)          # If group 1 exists then:
               # Nothing
|              # Else
(2|second|two) # Get match this group
)

而且,使用? (0或1次)比使用* (0次或更多次)更好,因为我已经在上面的正则表达式中包含了这部分内容。

票数 0
EN

Stack Overflow用户

发布于 2014-03-20 13:21:57

你可以试试这个regex。如果不想捕获组,可以在?:中使用(?:...)

代码语言:javascript
复制
\b((Q[.-]?2)|(Quarter (two|2))|(2[-.]?Q)|(Second Quarter))\b

基本上,它是使用管道正则表达式(总计4)在其中。您可以得到正则表达式从这里开始的解释。

票数 0
EN

Stack Overflow用户

发布于 2014-03-20 13:33:48

试试这个正则表达式:

代码语言:javascript
复制
(((2|Second|two)(\s|-|\.)?(Quarter|Q))|(Quarter|Q)(\s|-|\.)?(2|Second|two))

诀窍是将Quarter移动到Q之前,以便首先检查Quarter

演示

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

https://stackoverflow.com/questions/22533937

复制
相关文章

相似问题

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