Есть отличный прием, как бороться с объемными данными, которые не разбиты по колонкам и не всегда следуют определенной структуре. Покажу на примере..
В страховом полисе указан список клиник, куда можно обращаться, но указан он таким образом, что чтобы сделать хотя бы выводы о том, где эти клиники находятся нужно постараться.
Облегчим себе задачу с помощью Google Sheets. Скопируем весь список в Google Sheets:
Сразу стало немного лучше, уже видна какая-то структура. Присмотримся повнимательнее. Сначала идет название клиники, затем индекс (но не всегда), адрес (может быть Москва или область), ближайшая станция метро (не всегда), телефон регистратуры и часы работы. Выглядит как план работы!
Как нам лучше всего найти и извлечь данные из текста? #База знаний говорит, что самой полезной функцией будет REGEXEXTRACT (можно попробовать воспользоваться FIND, но это будет намного сложнее).
Функция REGEXEXTRACT позволяет задать регулярные выражения для поиска по строке и извлечения необходимых данных.
Регулярные выражения - язык поиска и манипуляции с данными, с использованием метасимволов. Для поиска задается шаблон, состоящий из симоволов, мета-символов и своеобразной разметки.
Мета-символы могут быть, например: \d - любая цифра, \s - любой символ отступа или пробела, . (точка) - любой символ.
С помощью разметки можно задавать последовательности: [abc] - любая из букв a, b или c; [m-q] - любая из букв от m до q; [а-яА-Я] - любой символ русского алфавита.
Можно указывать и количества: {6} - ровно 6 символов. Такая комбинация должна идти сразу после указания символа, например \d{6} - шесть цифр.
Достаточно подробно про язык регулярных выражений можно прочитать в Википедии да и, практически, везде - это одна из любимых тем программистов :-)
Например, вот как легко можно извлечь индекс (последоватьельность из 6 цифр):
=REGEXEXTRACT(A2;"\d{6}")
А вот так станцию метро (заметим, название станции, если указано, расположено между "ст. метро" и "Регистратура"):
=REGEXEXTRACT(A2;"метро\s([а-яА-я\s]+?)\sРегистратура")
В таблице формулы лучше обрамлять функцией IFNA, чтобы скрыть ошибки в тех строках, где нет индекса или станции метро.
Адрес клиники у нас находится между индексом или символом » слева и словами "ст. метро" или "Регистратура" справа. С помощью такого выражения мы сможем извлечь адреса:
=REGEXEXTRACT(A2;B2&".+?([а-яА-Я\s\d\.,\-/]+?)"&if(C2="";"\sРегистратура";",\sст\.\sметро")
В ячейках B2 и C2 указаны, соответственно, извлеченные индекс и станция метро. Если вместо индекса пустая строка, то под шаблон подходит текст после закрывающей кавычки », т.к. сама кавычка не задана нами в список допустимых символов.
Телефон мы можем извлечь с помощью регулярного выражения:
=REGEXEXTRACT(A2;"\+\d\(\d{3}\)\-\d{3}\-\d{2}\-\d{2}")
или так:
=REGEXEXTRACT(A2;"(\+[\d\-\(\)]+?)\s")
Так, один за другим, мы заполнили данными все столбцы в соответствии с нашим планом. Попробуем теперь визуализировать? Google Sheets поддерживает дополнения. Добавим дополнение Mapping Sheets и запустим его (для этих целей есть много дополнений, вы можете попробовать работать с другим):
Запускаем дополнение, настраиваем поля, которые будем использовать для указания адреса, фильтра и названия, жмем кнопку "Создать":
Дополнение будет работать пару секунд и потом кнопка "Посмотреть" станет активной. Давайте посмотрим!
ВАУ! Разительный контраст с безликим списком в начале. Теперь видно, что на юго-западе клиник много. А на востоке маловато (зато есть аж три клиники в Железнодорожном).
Файл с данными доступен для ваших экспериментов: https://docs.google.com/spreadsheets/d/10WtqMRjHdIgQkvDuNGR3YDImjDfvcf6XQ-FqU1Sbko0/edit?usp=sharing