Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Регулярные выражения - извлечь часть текста по условию
 
Самого доброго дня форумчанам. Требуется упростить ежедневную ручную возню с таблицами, почитав понял, что это возможно через регуляры, но с синтаксисом увы так и не разобрался. Есть массив данных по доставкам которые уже возили курьеры, как правило им выделен район и закреплены улицы которые не пересекаются. Ежедневно выгружается около сотни новых адресов по которым нужно быстро понять какого курьера назначить на этот адрес. Нужна обработка которая из полного адреса стандартного формата выгружаемого из базы вырежет только улицу и поместит в отдельный столбец, чтобы с помощью ВПР потом можно было быстро найти курьера по этому массиву, срезав ей же до улицы ежедневные данные. Формат адресов в примере, в 95% случаев это КОД ГОРОДА, ГОРОД ОБЛАСТЬ, УЛ. ХХХХХ т.е. извлечь нужно данные после второй запятой в строке и до первого пробела или запятой. 5% ошибок не страшны, отработаются вручную
 
Вариант формулой
=СЖПРОБЕЛЫ(ЛЕВБ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПСТР(B2;ПОИСК("|";ПОДСТАВИТЬ(B2;",";"|";2))+2;99);",";" ");" ";ПОВТОР(" ";99));99))
Алексей М.
 
Цитата
ivin.rzn написал: Регулярные выражения - извлечь часть текста по условию
Как вариант, однако, из недавно опубликованного НВП - https://www.planetaexcel.ru/blog/novaya-statya-analiz-teksta-regulyarnymi-vyrazheniyami-regexp-v-exc...
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Спасибо, читал. Но правильный синтаксис составить так и не смог)
 
мож кто сократит шаблон
Код
"(ул.ул |ул.ул. |ул.\d|пр-д|ул|пл|ш|б-р|пр-кт).([А-Яа-яёЁ]*.[А-Яа-яёЁ]*.[А-Яа-яёЁ]8\b|-[А-Яа-яёЁ]|[А-Яа-яёЁ]|\w)*"
Лень двигатель прогресса, доказано!!!
 
Сокращать не нужно, даже дополню еще вариантами типа ул. два пробела итд) Большое спасибо Сергей!
 
Цитата
ivin.rzn написал:
Сокращать не нужно
про сокращать эт написано для профи в регулярках, шаблон по любому можно написать короче чтоб он вытягивал то что вытягивает сейчас я этот шаблон составлял на примере того что вам указал по ссылке Z,
Лень двигатель прогресса, доказано!!!
 
Протестировал, в целом работает отлично, но осталось одно но: так как данные вводят пользователи при указании адреса доставки есть куча косяков вида ул.СЕМИНАРСКАЯ32 ул.ФРУНЗЕ6 итд, т.е. с номерами домов слипшимися с адресом. Можно ли очистить результаты от последних числовых значений в рамках одного выражения? Пробовал поверх второй регуляр для очистки текста от чисел, но он сьедает все числа и в том числе нормальные вполне варианты как 8-ой район или ул. 26 Бакинских комиссаров становятся нерабочими
 
Цитата
ivin.rzn написал:
Можно ли очистить результаты от последних числовых значений в рамках одного выражения?
Разобрался, добавил в конце \D. Большое спасибо всем за помощь еще раз)
 
вот так вроде циферы не цепляет в конце
Код
=RegExpExtract(B2;"(\W{2}-\W.{1,2}|\W{2}\.\W{2}.{1,2}|\W{2}\.\d*|\W{2}\.).([А-Яа-яёЁ]\s{1,2}[А-Яа-яёЁ]*|[А-Яа-яёЁA-Za-z]*)")
Лень двигатель прогресса, доказано!!!
 
Цитата
ivin.rzn написал:
дополню еще вариантами типа ул. два пробела
в таком случае лучше предварительно удалять двойные, ведущие и хвостовые пробелы с помощью =СЖПРОБЕЛЫ() на листе или Application.WorksheetFunction.Trim() в коде VBA
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
добрый день всем участникам обсуждения,еще вариант функции в столбце E,вытягивает много,но не всё,надо дорабатывать

 
Код
Function ddd$(t$)
   Dim t1$
With CreateObject("VBScript.RegExp"):   .IgnoreCase = True
 .Global = True: .Pattern = "[^\,\d]+"
If .test(t) Then t1 = .Execute(t)(2)
 .Pattern = "(?:ул\.?(?:ул)?\.? ?|ул\. ?)*\S+"
 If .test(t1) Then ddd = .Execute(t1)(0)
End With
End Function
Изменено: кузя1972 - 11 Мар 2018 19:11:25
 
OFF: кузя1972, а вы как-то связаны с Сергей SH (известный также, как "sv2013")?
названия файлов-примеров и знание регулярок очень сильно напомнило его)))
Изменено: Jack Famous - 12 Мар 2018 12:23:20
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
Страницы: 1
Читают тему (гостей: 1)
Наверх