正则表达式,其中任何一个组必须是强制性的
本文关键字:强制性 任何一 正则表达式 | 更新日期: 2023-09-27 17:51:09
假设我有一个字符串作为
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(是强制性的
我该怎么做?
也许您可以尝试使用条件组(并稍微简化正则表达式,我认为会使其更具可读性!
(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 次或更多次(更好。
你可以试试这个正则表达式。如果您不想捕获组,则可以在(?:...)
中使用?:
:
'b((Q[.-]?2)|(Quarter (two|2))|(2[-.]?Q)|(Second Quarter))'b
基本上它在其中使用管道正则表达式(总共四个(。您可以从此处获得正则表达式的解释。
试试这个正则表达式:
(((2|Second|two)('s|-|'.)?(Quarter|Q))|(Quarter|Q)('s|-|'.)?(2|Second|two))
诀窍是Quarter
移动到Q
之前,以便首先检查Quarter
。
演示