Вы можете использовать это регулярное выражение, чтобы разделить, как вы хотите,
(?<=[A-Z])(?=\d+$)
Здесь (?<=[A-Z])
положительный взгляд позади отмечает начало первого алфавита, а (?=\d+$)
отмечает начало непрерывных цифр до конца строки, следовательно, давая вам точку внутри строки, которую вы ищете.Просто разделив эту точку, вы получите желаемый результат.
Java-код,
String s = "MH12PE1433";
System.out.println(Arrays.toString(s.split("(?<=[A-Z])(?=\\d+$)")));
Печать,
[MH12PE, 1433]
Вы также можете поиграть с демо здесь
Кроме того, если у вас есть не-алфавитная строка, а не только цифры в конце строки, вы можете более широко использовать это регулярное выражение, которое отделит ваш текст от последнего алфавита (как вы говорите первый алфавит от конца строки).
(?<=[A-Za-z])(?=[^A-Za-z]*$)
Java-код,
List<String> list = Arrays.asList("MH12PE1433","MH12PE@@1123", "MH12PE@@##$$", "MH12Pe5555");
list.forEach(x -> System.out.println(x + " --> " + Arrays.toString(x.split("(?<=[A-Za-z])(?=[^A-Za-z]*$)"))));
Печать,
MH12PE1433 --> [MH12PE, 1433]
MH12PE@@1123 --> [MH12PE, @@1123]
MH12PE@@##$$ --> [MH12PE, @@##$$]
MH12Pe5555 --> [MH12Pe, 5555]