Страницы: 1
RSS
Регулярные выражения (RegExp). Нормализация строки, Обзор методов быстрого преобразования строки
 
Доброго времени суток, Планетяне!

Создал тему, чтобы отшлифовать найденные решения по преобразованию строки к "нормальному" состоянию
Для чего это преобразование нужно: для автоматического точного поиска среди строк, отличающихся друг от друга несущественной информацией. А именно, удаление этой информации и приведение "несущественно" разных строк к одному виду

Решено. Огромная благодарность Андрею VG  :idea:  8)
Итоговый код
Скрин с примерами из файла (жёлтым выделено то, что стало дубликатами после обработки)
Изменено: Jack Famous - 29.10.2020 09:39:52 (Добавил примеры преобразований)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
Удаление пробелов слева и справа от списка символов. Нужно объединить в один шаблон
Привет, Алексей.
Так и не понял, чем не угодил шаблон
Код
RElr.Pattern = " *([,-/:;\\_]) *"
RElr.Replace(a, "$1")

Опять же
Цитата
Jack Famous написал:
Удаление финишных символов справа
Если считать, что финишные символы задаются алфавитом [ ,-/:;\\_], то шаблон для спрва
Код
REdelr.Pattern = "[ ,-/:;\\_]+$"
REdelr.Replace(a, "")
Цитата
Jack Famous написал:
Удаление финишных символов. Объединить удаление слева и справа в один шаблон
Так всё тоже самое
Код
REdelrl.Pattern = "^[ ,-/:;\\_]+(.*?)[ ,-/:;\\_]+$"
REdelrl.Replace(a, "$1")

Ну, и да, не мешало бы следовать этому не замысловатому правилу
Цитата
2.3. Приложите файл(ы) с примером (общим весом не более 300Кб) в реальной структуре и форматах данных того, что есть сейчас и того, что хотелось бы на выходе.
:)
Изменено: Андрей VG - 26.10.2020 23:30:44
 
Андрей VG, привет))) Видимо, к беседе больше никто не присоединится  :D
Цитата
Андрей VG: чем не угодил шаблон
ну вообще раньше в шаблоне не было звёздочек и именно поэтому я и разбивал на 2 шаблона с "пробел+". Звёздочки решили проблему - совсем забыл про них. Работает  :idea:
Цитата
Андрей VG: шаблон для справа
блин - а я всё заменял на $1, хотя нужно было просто удалить. Работает (в том числе объединённый шаблон)  :idea:
Цитата
Андрей VG: не мешало бы следовать этому не замысловатому правилу … приложите файл(ы) с примером
тут такое дело: обработчик был рабочий с самого начала, только некоторые шаблоны были разделены и/или заменены. То есть итог обработки (цель и пример) был, только нужно было, конечно, его отдельно вынести для визуального контроля

Что ж - всё работает. Ещё раз спасибо Андрею!  :idea:
Финальный код в стартовом сообщении. Удаление символов слева и справа пришлось-таки заменить на строковые функции, которые в данном случае стабильно быстрее на 10-15% (-5% слева и -25% справа по времени)
Изменено: Jack Famous - 27.10.2020 10:20:55
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Огромный респект Jack Famous, и Андрей VG, ! Сохранил в закладки!
 
Vladimir Chebykin, спасибо за положительный отзыв! Всегда пожалуйста  :)
Скоро выложу код для нечёткого сравнения методом перестановки слов  ;)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
А примера нет что куда код преобразовывает? Первичные данные и готовый результат.
А то файл пустой зачем-то приложили, а что он делает - не понятно.
Вы бы хотя бы 10 строк заполнили в файле, а рядом преобразованные данные. Тогда было бы понятно.
А так люди придут в тему... ну, что-то про Regexp... а что куда и как....
Изменено: New - 28.10.2020 14:59:55
 
Цитата
New: А примера нет что куда код преобразовывает?
в процедуре t () есть строка, которая должна получиться и строка для теста макроса:
Код
Const check$ = "25/1 а;а.а;а 5 а а.sd аsd аsdа:s 2 12 1 аs d 6 а dаs 2,-,3/12-34.выа ыва.ы.в:в:в 13 15 аы ва ыв 7.7\/.25"
a = " -  ,. - 25   /1aa;aаа.аа;;aa5a(a......sd)asd asda:s2 12 1as{}d6a das 2   ,--,,   3/12   --34.выа••ыва .ы. вв:вввbb:bbb 13   15 аыы ва ыв7  () . () 7\ \ //  /  /     .  25 / / . , "
+ Добавил несколько примеров в файл и заменил стартовое сообщение  ;)
Изменено: Jack Famous - 29.10.2020 09:37:39
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, я бы предложил вообще эту тему сохранить в копилку! Регулярки - вещь полезная! Не знаю, как это делается, но я бы проголосовал - ЗА.
 
Цитата
Vladimir Chebykin: я бы предложил вообще эту тему сохранить в копилку … Не знаю, как это делается
ещё раз спасибо за положительную оценку  ;) я и сам не знаю, как это делается :D

Я не против, но позже. Эта тема вместе с другими войдёт в сборник Нечёткий поиск / Fuzzy Lookup
Когда он будет готов и оформлен, тогда и можно будет переносить  :idea:

К тому же, уже сейчас есть куда более крутые претенденты для переноса:
  1. Все три темы от sokol92
  2. Справка по функциям рабочего листа Excel 2019 от того же Андрея VG (есть ещё мануалы по PQ)
  3. Многие решения bedvit'а, такие как OfficeEvents и Перевести условное форматирование в обычное
  4. Мои, полностью оформленные, такие как Форма с поиском по маске или Расширенное сравнение двух списков

Копилка пополняется очень редко и складывается такое ощущение, что в ней ограничено место  :D
Механизм и критерии отбора по "полезности" также не обозначены, поэтому остаётся только предоставить решения по переносу на усмотрение модераторов …
Изменено: Jack Famous - 29.10.2020 10:56:17
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх