正则表达式,其中任何一个组必须是强制性的

本文关键字:强制性 任何一 正则表达式 | 更新日期: 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

演示

相关文章: