假设我有一个字符串
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”或“Quarter”正则表达式匹配
我希望任何一组(1或7)是必修课
我该怎么做?
答案 0 :(得分:0)
你可以试试这个正则表达式。如果您不想捕获组,可以在?:
内使用(?:...)
:
\b((Q[.-]?2)|(Quarter (two|2))|(2[-.]?Q)|(Second Quarter))\b
基本上它使用了管道正则表达式(共四个)。您可以获得正则表达式from here的解释。
答案 1 :(得分:0)
也许你可以尝试使用一个条件组(并且有点简化正则表达式,我认为会让它更具可读性!):
(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次或更多次)更好,我已经包含在上面的正则表达式中。
答案 2 :(得分:0)
试试这个正则表达式:
(((2|Second|two)(\s|-|\.)?(Quarter|Q))|(Quarter|Q)(\s|-|\.)?(2|Second|two))
诀窍是将Quarter
移至Q
之前,以便首先检查Quarter
。