Eu preciso analisar uma string que se parece com isso: A Christmas Special - Special of the day
em 3 ou 4 grupos distintos, dependendo se o caractere -
está presente na string original ou não, como:
(Especial de Natal) (-) (Especial) (do dia) se o - char estiver presente.
ou
(Especial de Natal) (Especial) (do dia) se o - char não estava presente.
O padrão RegEx que estou tentando usar na string é semelhante a: ^(.+?)( - )?(Special)(.*)
Que se traduz em:
Grupo1 = Corresponde a qualquer caractere (exceto a nova linha) Entre um e ilimitado, o menor número de vezes possível, expandindo conforme necessário [lento]
Grupo2 = Corresponde -
literalmente. Entre zero e uma vez, quantas vezes for possível, devolvendo conforme necessário [ganancioso]
Grupo3: corresponde aos caracteres Special
literalmente
Grupo 4: Corresponde a qualquer caractere (exceto a nova linha) Entre zero e ilimitado, tantas vezes quanto possível, devolvendo conforme necessário [ganancioso]
O problema com a expressão 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 seja parte de então 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 estava presente.
O que não corresponde a nenhum dos padrões de agrupamento que estou tentando obter da string, então a pergunta é óbvia, ou seja,
Como eu altero o padrão regex para que ele não trate a primeira ocorrência da palavra Special como seu próprio grupo exclusivo, mas torne a segunda ocorrência única para que eu possa obter o agrupamento que eu esperava?