Вы можете сопоставить di git или пробел до и после захвата char [A-Z]
.
В группе замены используйте 1.
^.*[\d ]([A-Z])[ \d].*$
Regex demo | Java demo
Если в строке может быть только один символ верхнего регистра:
^[^A-Z]*[\d ]([A-Z])[ \d][^A-Z]*$
Regex demo
Пример кода
String test = "22A 302 abc";
String works = test.replaceAll("^.*[\\d ]([A-Z])[ \\d].*$", "$1");
System.out.println(works);
Вывод
A
Для соответствия между цифрами 0–9, горизонтальными пробелами или знаками препинания:
String works = test.replaceAll("^.*[\\p{P}0-9\\h]([A-Z])[\\p{P}0-9\\h].*$", "$1");