Supposons que j'ai une chaîne comme
Q2
Il y a beaucoup de variations liées à cette chaîne comme
Q2
Quarter two
Quarter 2
2-Q
2.Q
Q.2
Q-2
Second Quarter
etc.
Mon regex est
((2)|(second))*W*((q)|(quarter))W*((2)|(second)|(two))*
S'il n'y a que "q" ou "Quarter", l'expression rationnelle sera identique
Je veux qu'un groupe (1 ou 7) soit obligatoire
Comment puis je faire ça?
Réponses:
0 pour la réponse № 1Peut-être que vous pourriez essayer d’utiliser un groupe conditionnel (et en simplifiant un peu la regex, je pense, le rendrait plus lisible!):
(2|second)?[^wn]*(quarter|q)[^wn]*(?(1)|(2|second|two))
Le groupe conditionnel signifie:
(?(1) # If group 1 exists then:
# Nothing
| # Else
(2|second|two) # Get match this group
)
En outre, il serait préférable d'utiliser ?
(0 ou 1 fois) que *
(0 fois ou plus) que j'ai déjà inclus dans la regex ci-dessus.
0 pour la réponse № 2
Vous pouvez essayer avec cette regex. Vous pouvez utiliser ?:
à l'intérieur de (?:...)
si vous ne voulez pas capturer les groupes:
b((Q[.-]?2)|(Quarter (two|2))|(2[-.]?Q)|(Second Quarter))b
Fondamentalement, il utilise regex piped (total quatre) en elle. Vous pouvez obtenir l'explication de la regex d'ici.
0 pour la réponse № 3
Essayez cette regex:
(((2|Second|two)(s|-|.)?(Quarter|Q))|(Quarter|Q)(s|-|.)?(2|Second|two))
Le truc bouge Quarter
à avant Q
pour que Quarter
sera vérifié en premier.