Вы не указали язык, который используете. Если он поддерживает \K
, как PCRE (PHP)
и другие, вы можете разделить свою строку на соответствие следующему регулярному выражению.
^(?:(?:FALL|WINTER|SPRING)\K +|SUMMER\K(?: +11?)? +)(?=\d{4}$)
Demo
Если бы строка была одной из следующих
SUMMER 11 2011
^^^^
SUMMER 1 2011
^^^
SUMMER 2011
^
FALL 2011
^
, регулярное выражение соответствовало бы символу (-ам) на шляпе (-ах). Если бы строка была первой из этих примеров, разбиение на " 11 "
привело бы к массиву ["SUMMER", "2011"]
.
Если бы строка была одной из следующих:
SUMMER 12 2011
WINTER 1 2020
, не было бы совпадение, сигнализирующее о проблеме с данными.
Механизм регулярных выражений PCRE выполняет следующие операции.
^
(?:
(?:FALL|WINTER|SPRING) match 'FALL', 'WINTER' or 'SPRING'
\K + forget everything matched so far then match 1+ spaces
| or
SUMMER match 'SUMMER'
\K forget everything matched so far
(?: +11?)? + optionally match 1+ spaces, then '1', then optionally
match '1', followed by 1+ spaces
) end non-capture group
(?=\d{4}$) match 4 digits at end of the line in a positive lookahead
Взято из демонстрационной ссылки, "\ K сбрасывает начальную точку сообщенного совпадения . "