Мне нужно разобрать строку , которая выглядит следующим образом : A Christmas Special - Special of the day
в 3 -х или 4 - отличительные группы в зависимости от того, если -
символ присутствует в исходной строке или не нравится , например:
(Рождественское специальное предложение) (-) (Специальное предложение) (дня), если присутствовал символ -.
или же
(Рождественское специальное предложение) (Специальное предложение) (дня), если - символ не присутствовал.
Шаблон RegEx, который я пытаюсь использовать в строке, выглядит следующим образом: ^(.+?)( - )?(Special)(.*)
Что переводится как:
Group1 = соответствует любому символу (кроме новой строки) от одного до неограниченного количества раз, как можно меньше раз, расширяясь по мере необходимости [ленивый]
Group2 = соответствует -
буквальном смысле. От нуля до одного раза, столько раз, сколько возможно, отдача по мере необходимости [жадный]
Group3: буквально соответствует персонажам Special
Group4: соответствует любому символу (кроме новой строки) от нуля до неограниченного количества раз, столько раз, сколько возможно, возвращая при необходимости [жадный]
Проблема с выражением , как он стоит в настоящее время является то , что поскольку -
символ не является обязательным, то первое вхождение слова Special
получает лечение , как это часть другой группы , чем я хочу быть частью так результирующие группы выглядят следующим образом ,
(Рождество) (Специальное) (- Специальное предложение дня), если присутствовал символ -.
или же
(Рождество) (Специальное) (Специальное предложение дня), если - символ не присутствовал.
Что не соответствует ни одному из шаблонов группировки, которые я пытаюсь получить из строки, поэтому вопрос очевиден.
Как я могу изменить шаблон регулярного выражения, чтобы он не рассматривал первое вхождение слова Special как свою собственную уникальную группу, а вместо этого делал второе вхождение уникальным, чтобы я мог получить ожидаемую группу?