Вот официальные регулярные выражения для сопоставления британских почтовых индексов:
http://interim.cabinetoffice.gov.uk/media/291370/bs7666-v2-0-xsd-PostCodeType.htm
Если вы хотите разбить найденный почтовый индекс на две части, разве это не вопрос разделения на пробелы? Две части почтового индекса в Великобритании просто разделены пробелом, верно? В Java это будет:
String[] fields = postcode.split("\\s");
где почтовый индекс - это проверенный почтовый индекс, а поля [] - это массив длиной 2, содержащий первую и вторую части.
Изменить: Если это для проверки ввода пользователя, и вы хотите проверить первую часть, ваше регулярное выражение будет:
Pattern firstPart = Pattern.compile("[A-Z]{1,2}[0-9R][0-9A-Z]?");
Для проверки второй части это:
Pattern secondPart = Pattern.compile("[0-9][A-Z-[CIKMOV]]{2}");