假设我有一个字符串
Q2有许多与此字符串相关的变体,如
Q2
Quarter two
Quarter 2
2-Q
2.Q
Q.2
Q-2
Second Quarter 等。
我的判罚是
((2)|(second))*\W*((q)|(quarter))\W*((2)|(second)|(two))*如果只有"q“或”四分之一“正则表达式,则匹配。
我希望任何一个团体(1或7)都是强制性的。
我怎么能这么做?
发布于 2014-03-20 13:23:14
也许您可以尝试使用一个条件组(并简化正则表达式,我认为这样可以使其更易读!):
(2|second)?[^\w\n]*(quarter|q)[^\w\n]*(?(1)|(2|second|two))有条件组是指:
(?(1) # If group 1 exists then:
# Nothing
| # Else
(2|second|two) # Get match this group
)而且,使用? (0或1次)比使用* (0次或更多次)更好,因为我已经在上面的正则表达式中包含了这部分内容。
发布于 2014-03-20 13:21:57
你可以试试这个regex。如果不想捕获组,可以在?:中使用(?:...):
\b((Q[.-]?2)|(Quarter (two|2))|(2[-.]?Q)|(Second Quarter))\b基本上,它是使用管道正则表达式(总计4)在其中。您可以得到正则表达式从这里开始的解释。
发布于 2014-03-20 13:33:48
试试这个正则表达式:
(((2|Second|two)(\s|-|\.)?(Quarter|Q))|(Quarter|Q)(\s|-|\.)?(2|Second|two))诀窍是将Quarter移动到Q之前,以便首先检查Quarter。
演示
https://stackoverflow.com/questions/22533937
复制相似问题