Страницы: 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.03.2018 19:11:25
 
OFF: кузя1972, а вы как-то связаны с Сергей SH (известный также, как "sv2013")?
названия файлов-примеров и знание регулярок очень сильно напомнило его)))
Изменено: Jack Famous - 12.03.2018 12:23:20
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
А как сделать, чтобы извлекалось слово перед "проспект"?
 
Доброе время суток
Цитата
shlang написал:
извлекалось слово перед "проспект"?
Вариант
Код
Public Function getWordBeforeAvenue(ByVal fromText As String) As String
    Dim pReg As Object
    Set pReg = CreateObject("VBScript.RegExp")
    pReg.Pattern = "\S+(?=\s+проспект)"
    getWordBeforeAvenue = pReg.Execute(fromText)(0).Value
End Function
 
Спасибо.
А первое число с конца? Буду очень благодарен!
 
Цитата
shlang написал:
А первое число с конца?
Шаблон
Код
"\d+(?=\D*$)"
 
Спасибо! Могли бы расшифровать? Хочу эту премудрость освоить.
 
Уже давно расшифровано. Вы не поверите, но даже книги в продаже есть! :)
 
Помогите пожалуйста, как извлечь текст вида MSKU1234565 (номер контейнера) из ячейки с текстом.
Например:
В ячейке есть текст: «Контейнер MSKU1234567 прибыл на терминал 12.05.2019. Акт приема № 1 от 12.05.2019.»
Нужно из этого предложения извлечь: в одну ячейку - MSKU1234567, в другую - 1 от 12.05.2019

Заранее спасибо.
 
Создайте отдельную тему с названием, отражающим суть задачи
 
Доброе время суток
Вариант
 
Тёзка, привет. Ограниченная бесплатная версия (9 актов)?  :)
 
Jack Famous,
Цитата
OFF: кузя1972, а вы как-то связаны с Сергей SH (известный также, как "sv2013")?
Он же sv2014, sv2015
Я тоже задавал ему этот вопрос, но он мне не ответил. И что-то пропал с планеты и с соседнего форума.
 
Kuzmich, очень странные дела…
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
RAN написал:
Ограниченная бесплатная версия (9 актов)?  
Привет, тёзка.
Нет, это как аукнется... :)
 
Цитата
Андрей VG написал:
Доброе время сутокВариант

Прикрепленные файлы
Как-то так.xlsb  (15.21 КБ)
Огромное спасибо!!! Правда не понял как это у Вас получилось.  :oops:  
 
Цитата
как извлечь текст вида MSKU1234565 (номер контейнера)
UDF
Код
Function MSKU(cell$)
 With CreateObject("VBScript.RegExp")
     .Pattern = "MSKU\d{7}"
     MSKU = .Execute(cell)(0)
 End With
End Function


Код
Function iDate(cell$)
 With CreateObject("VBScript.RegExp")
     .Pattern = "от \d{1,2}\.\d{1,2}\.\d{2,4}"
     iDate = .Execute(cell)(0)
 End With
End Function
Страницы: 1
Наверх