Salve a tutti,
devo selezionare parti di una stringa di un nome di un file mp3 composto da varie sezioni (artista, titolo, album e cose varie).
Ho le seguenti opzioni alcune che si presentano in mood mutuamente esclusivo quindi le divido in due gruppi:
Gruppo 1:
a: Luciano Ligabue - Buon compleanno Elvis - 07 Certe notti
b: Luciano Ligabue - Buon compleanno Elvis cd 1 - 07 Certe notti
c: Luciano Ligabue - Buon compleanno Elvis (cd 1) - 07 Certe notti
d: Luciano Ligabue - Buon compleanno Elvis (cd 1 - Strumentale) - 07 Certe notti
Gruppo 2:
a: 07 Certe notti - Luciano Ligabue
Ho scritto le seguenti espressioni regolari per i due gruppi:
Gruppo 1:
String strPatternUnSelected = "(.*?) - (.*) - ([0-9]{2})(.*?)";
Gruppo 2:
String strPatternSelected = "([0-9]{2}) (.*) - (.*)";
Per quanto riguarda il gruppo 1, l'espressione matcha correttamente solo il caso A, mentre seleziona anche altre parti della stringa nei casi B, C, D (nel caso d capisco che sia colpa di un carattere "-" di troppo ma non riesco a sistemare la cosa). Inoltre non capisco perché se non tolgo il "?" dal secondo gruppo non funziona neanche nel caso A.
Per quanto riguarda il gruppo 2, l'espressione matcha correttamente il caso A, ma anche in questo caso non capisco perché è necessario togliere il "?". Mi viene in mente di aver capito male a cosa serva!
Per completezza vi dico che uso il metodo replaceAll()
Per esempio:
strName.replaceAll(strPatternSelected, "$1 $2 - $3");
Grazie a chi mi risponderà.