Да предположим, че имам низ
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 за отговор № 1Може би бихте могли да опитате да използвате условна група (и опростяване на малкото понятие, което според мен би направило по-разбираемо!):
(2|second)?[^wn]*(quarter|q)[^wn]*(?(1)|(2|second|two))
Подразбиращата се група означава:
(?(1) # If group 1 exists then:
# Nothing
| # Else
(2|second|two) # Get match this group
)
Също така би било по-добре да го използвате ?
(0 или 1 път) от *
(0 или повече пъти), които вече включих в горния регекс.
0 за отговор № 2
Можете да опитате с този регекс. Можеш да използваш ?:
вътре в (?:...)
ако не искате да улавяте групите:
b((Q[.-]?2)|(Quarter (two|2))|(2[-.]?Q)|(Second Quarter))b
По принцип той използва тръбопроводен регекс (общо четири) в него. Можете да получите обяснение на регекс оттук.
0 за отговор № 3
Опитайте този регекс:
(((2|Second|two)(s|-|.)?(Quarter|Q))|(Quarter|Q)(s|-|.)?(2|Second|two))
Трикът се движи Quarter
до преди Q
така че Quarter
ще бъдат проверени първо.