Введение
Этот пост длинный, но я считаю его тщательным. Я надеюсь, что этот пост может быть полезным (адреса) для других при обучении сложных регулярных выражений VIM. Спасибо за ваше время.
Глобальные адреса:
Американской, Канадской и нескольким другим странам предлагается 5 полей в форме, которая затем отображается в формате с разделителями-запятыми, который мне необходимо дополнительно проанализировать. В идеале разделенный запятыми контент выглядит следующим образом:
Некоторое Действительно Хорошее Место, 111 Улица, Красивый Город, StateOrProvince, почтовый индекс
где zip может быть либо последовательностью просто цифр (США) или цифр и букв (Канада).
Неизменно, люди вводят лишнюю запятую в поле ввода своего текстового поля, что усложняет синтаксический анализ этих данных. Например:
Some Действительно Хорошее Место, 111 Street, suite 101, Красивый Город, StateOrProvince, почтовый индекс
Еще более усложняет этот анализ то, что данные из неамериканских и неканадских стран содержат дополнительное разделенное запятыми поле, которое им было каким-то образом предоставлено - добавление места для их въезда в свою страну. (Нет, для их записей нет поля «США» или «Канада». Таким образом, оно «в дополнение» к исходным 5 полям, разделенным запятыми.) Например:
Иностранное название здания, название улицы, город, почтовый индекс, страна
",," обычно пусто, поскольку неамериканские страны не сегментированы на штаты. И, да, такие же «дополнительные запятые», как описано выше, тоже происходят здесь.
Иностранное название здания, перекресток улиц, район, название улицы, город, почтовый индекс, страна
Стратегия анализа:
Название страны никогда не будет содержать цифру, тогда как почтовый индекс США или Канады всегда будет содержать хотя бы несколько цифр. Если вы вернетесь назад, используя это предположение о содержимом последнего поля, то вы сможете разместить страну, почтовый индекс, штат (если не пустое ",,"), город и улицу в их позиции уважения - которые являются наиболее важными поля, чтобы получить право. Все, что находится за пределами этих разделов, может быть объединено в первой или двух строках в качестве описания адреса (то есть здания, имени, номера, перекрестка и т. Д.). Например:
Некоторое Действительно Хорошее Место, 111 Улица, набор 101, Красивый Город, Прекрасное государство, Цифры и Буквы
- В последнем разделе есть цифра (следовательно, адрес в США или Канаде)
- Там всего 6 разделов, так что это на один больше, чем оригинал 5
- Зная, что разделы 5-2: почтовый индекс, штат, город, адрес ...
- 6 минус 5 (оригинал) = добавить дополнительное поле Address (Address2) и оставить первый раздел в качестве заголовка, в результате чего:
Заголовок: Некоторое действительно хорошее место, Адрес1: улица 111, Адрес2: Люкс 101, Город: Красивый город, Штат / провинция: Прекрасный штат, Индекс: цифры и буквы
Принимая во внимание, что может иметь место расхождение в том, куда идет «111 Street» или «Suite 101» (Address1 или Address2), он по меньшей мере объединяет почтовый индекс, штат, город и адрес и оставляет первый раздел в виде «Заголовок» на адрес электронной почты для ввода данных.
При таком подходе внешний адрес анализируется как:
Иностранное название здания, перекресток улиц, район, название улицы, A
Город, Почтовый индекс, Страна
- В последнем разделе нет цифры, поэтому это должна быть Страна
- Это означает, что, двигаясь справа налево, второй раздел - почтовый индекс
- Так что теперь (за рубежом) у вас есть «оригинальные 6 разделов», которые нужно вычесть из общего количества 7 в примере
- 7-й раздел = страна, 6-й = почтовый индекс, 5-й = штат (в основном пустые по внешнему адресу), 4-й = город, 3-й = адрес1, 2-й = адрес2, 1-й = заголовок
- Мы знали, что использовали два поля адреса, потому что в примере было 7 разделов, а внешние адреса имели базу из 6 разделов. Любое количество секций над базой добавляется во второе поле address2. Если над счетчиком базовых разделов есть 3 раздела, то они добавляются к каждому внутри поля address2.
Кодирование
В этом подходе, использующем VIM, как мне сначала прочитать количество разделенных запятыми разделов (после того, как я записал весь адрес в регистр)? Как мне выполнить подстатью (ы) в серии разделенных запятыми разделов, для которых я не уверен в количестве существующих разделов?
Примеры адресов
Вот несколько практических адресов (в США и за рубежом), если вы хотите помочь:
City Gas & Electric - корп.4, 222 Middle Park Ct, CP4120F, Даллас, Техас, 44984
MHG Engineering, Inc. Suite 200, пр. Бальбоа, 9899, Сан-Диего, Калифорния, 92123-1502
SolarWind Turbines, 2-й этаж конференц-зала, 2300 Ruffin Road, Сиэтл, Вашингтон, 84444
123 Aeronautics, 2239 Индустриальный парк, Солт-Лейк-Сити, Юта, 55344
Ongwanda Gov't Resources, 6000 Portsmouth Avenue, Оттава, Онтарио, K7M 8A6
Graylang Seray Center, 6600 Haig Rd, Singapore, 437848, Singapore
Лот 459, Блок 14, Джалан Султан Тенга, Петра Джая, Кучинг, 93050, Малайзия
Virtual Steel, 1 Umgazi Rd Aspec Park, Претория, 0075, Южная Африка
Idiom Towers South, пятый этаж, конференц-зал Jasmen, 1500 Freedom Street, Претория, 0002, Южная Африка