Вы используете класс символов, в котором вы должны либо экранировать дефис, либо поставить его в начале или в конце, как [^QX,\d-]
, либо вы соответствуете диапазону от запятой до запятой.Но изменение, которое даст вам -QX-1081
, что не является желаемым результатом.
Вы можете сопоставить свой шаблон и затем заменить его первой группой захвата $1
:
^(?:[A-Z]+-)+(QX-\d+)$
В JavaВы должны удвоить escape, совпадая с цифрой \\d
Это будет соответствовать:
^
Начало строки (?:[A-Z]+-)+
Повторить 1+ разодин или несколько символов в верхнем регистре с последующим дефисом (QX-\d+)
Захват в группе QX-
с последующими 1+ цифрами $
Конец строки
Например:
String result = "MCC-QX-1081".replaceAll("^(?:[A-Z]+-)+(QX-\\d+)$", "$1");
System.out.println(result); // QX-1081
См. Демонстрационную версию Regex | Java demo
Обратите внимание, что если вы делаете только 1 замену, вы также можете использовать replaceFirst