Разделите почтовый индекс Великобритании на две основные части, используя Java
Это регулярное выражение для проверки почтовых индексов прекрасно работает
^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) {0,1}[0-9][A-Za-z]{2})$
но я хочу разделить почтовые индексы, чтобы получить отдельные части почтового индекса с использованием Java.
Как это можно сделать в Java?
3 ответа
Вот официальные регулярные выражения для сопоставления британских почтовых индексов:
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}");
Я понимаю, что прошло довольно много времени с тех пор, как был задан этот вопрос, но у меня было такое же требование и я решил опубликовать свое решение на случай, если оно кому-нибудь поможет:
const string matchString = @"^(?<Primary>([A-Z]{1,2}[0-9]{1,2}[A-Z]?))(?<Secondary>([0-9]{1}[A-Z]{2}))$";
var regEx = new Regex(matchString);
var match = regEx.Match(Postcode);
var postcodePrimary = match.Groups["Primary"];
var postcodeSecondary = match.Groups["Secondary"];
Это не проверяет почтовый индекс, но разделяет его на 2 части, если между ними не было пробела.
Для этого вы можете использовать недавно открытую библиотеку Google. http://code.google.com/p/libphonenumber/