У меня большой документ с адресными блоками, который содержит множество различных форматов адресов.
В документе есть разделы с абзацами, рисунками и произвольным текстом, и в этих разделах есть большие группы адресных блоков. Адресные блоки всегда будут иметь пустую строку до и после адреса, и они всегда будут заканчиваться ZIP (+4 необязательно).
К сожалению, адреса различаются настолько, что я не могу придумать способ для захвата определенных c компонентов (иногда есть только получатель, а другие есть получатель и строка ATTN. Иногда есть адрес дополнительного устройства и т. д. c ..).
Я придумал шаблон регулярных выражений для сопоставления блоков адреса в документе; однако, это не совсем точно. Я хотел бы захватить только адресные блоки, но мой шаблон также захватывает случайные строки текста между адресными блоками.
Мой шаблон:
[regex]$pattern = "(?xm)\n(
^[\w\d\-\.\s]+(\d{5})(?:\-\d{4})?
)";
Пример того, что это такое захват:
DUSHANBE PLACEISTAN
DASHB FARMINTON
PSC 123 BOX 1
APO AP 12345
DETACHMENT ATTACHMENT
SECURITY GUARD OFFICE
AMERICAN EMB E01
UNIT 1712
APO AE 54321-7798
TASHKENT UZBEKISTAN
TONE TENTKASH DOS
75485 TORSHEN PL
WASHINGTON DC 12345-1234
В приведенном выше примере не должно быть захвата DUSHANBE PLACEISTAN или TASHKENT UZBEKISTAN (только блоки адресов).
Любой и понимание того, как правильно анализировать текст будет принята с благодарностью.