Eu preciso analisar uma string que se parece com isso: A Christmas Special - Special of the dayem 3 ou 4 grupos distintos, dependendo se o -caractere está presente na string original ou não:
(Um especial de Natal) (-) (Especial) (do dia) se o - char estava presente.
ou
(Um especial de Natal) (Especial) (do dia) se o - char não estiver presente.
O padrão RegEx que estou tentando usar na string se parece com o seguinte: ^(.+?)( - )?(Special)(.*)
Que se traduz em:
Grupo1 = Corresponde a qualquer caractere (exceto nova linha) Entre um e um número ilimitado, o menor número de vezes possível, expandindo conforme necessário [preguiçoso]
Grupo2 = Corresponde -literalmente. Entre zero e uma vez, quantas vezes for possível, devolvendo o que for necessário [ganancioso]
Grupo3: Corresponde aos caracteres Specialliteralmente
Grupo4: Corresponde a qualquer caractere (exceto nova linha) Entre zero e ilimitado vezes, quantas vezes for possível, devolvendo conforme necessário [ganancioso]
O problema com a expressão como está agora é que, como o -caractere é opcional, a primeira ocorrência da palavra Specialé tratada como parte de um grupo diferente do que eu quero que faça parte, de modo que os grupos resultantes se parecem com isso.
(Um Natal) (Especial) (- Especial do dia) se o - char estava presente.
ou
(Um Natal) (Especial) (Especial do dia) se o - char não estiver presente.
O que não corresponde a nenhum dos padrões de agrupamento que estou tentando obter da string, portanto a pergunta é óbvia.
Como altero o padrão regex para que não trate a primeira ocorrência da palavra Special como seu próprio grupo exclusivo, mas torne a 2ª ocorrência única para que eu possa obter o agrupamento que esperava?