All streams
Search
Write a publication
Pull to refresh

Comments 19

Код на Python повторяет код на VBS.

На Python вроде бы как то так: re.sub(r'\s+', ' ', str)

/g или аналог в питоне не надо разве?

Нет, по умолчанию (условно) global = true, т.е. везде заменяет

А для номеров вхождений re.sub() имеет параметр count, т.е. вот так примерно:

re.sub(r"\s+", " ", str_in, count=1)

https://translated.turbopages.org/proxy_u/en-ru.ru.c8cf6852-68b4889a-e1b508bf-74722d776562/https/stackoverflow.com/questions/3951660/how-to-replace-the-first-occurrence-of-a-regular-expression-in-python

Виноват, исправил, спасибо

s/\s+/ /g точно стоит написания целой статьи?

А, пардон – ещё trim. s/^ | $//g (если именно регэкспом)

Честно скажу - не знаю. Да и хотел покороче а "мыслию по древу растёкся" (

Просто видел вот такое (и не единожды в разных интерпретациях):

https://sky.pro/media/udalenie-lishnih-probelov-v-stroke-v-python/?ysclid=mezypmjc8s446455963

Такое ощущение, что многие сознательно обходят тему регулярных выражений. Всё что угодно, лишь бы их не использовать, может реально кто-то не слышал...

Скажем так: эта статья - компенсация за боль ручной вычистки )

Такое ощущение, что многие сознательно обходят тему регулярных выражений. Всё что угодно, лишь бы их не использовать, может реально кто-то не слышал...

Надо смотреть язык, конкретные реализации и входные данные. Так то создать обьект RegExp и скомпилировать выражение может оказаться недешово по накладным расходам.

Да, примерно всегда. Но вы гляньте реализацию по ссылке :-)

Ход мыслей автора того решения мне понравился) креативный человек))

Слишком редко регулярные выражения приносят профит по производительности. Как следствие ими нечасто пользуются. Их логика не самая простая, и есть изрядно грабель.

Всё вместе приводит к тому, что если мы не ожидаем прям "много строк", яб написал явно "заменить все табуляции на пробелы", "заменить все переводы строки на пробелы" итд итп, а потом "заменить два пробела на один пока что-то меняется". Да - это, возможно будет медленнее, но если быстро не требуется - это не проблема.

И не потому, что я регэксп "не осилю", а потому, что у меня совершенно нет уверенности, что его быстро поймет и осилит тот, кто будет это после меня трогать когда-нибудь.

Тут как с рекурсией. Лучше поберечься. Если можно.

На сколько понял речь идёт об обработке строки где-то до 1000 символов перед записью в бд. В таком случае Python и функция с регуляркой подходят больше всего.

А если данные нормализовать в Jupyter блокноте, то ваш способ будет понятней, чтобы отобразить логику каждого шага измения источника.

На сколько понял речь идёт об обработке строки где-то до 1000 символов перед записью в бд

Абсолютно верно

просто уточню (не принципиально) спущена сверху максимальная длина строки 255 символов

мммм, понимаю, что можем уйти в дискуссию, скажу мягко, что только частично согласен

яб написал явно "заменить все табуляции на пробелы", "заменить все переводы строки на пробелы"

К сожалению много пользователей было (> 100; < 1000) и к каждому лично не сходишь и не скажешь: "пожалуйста, не используйте: табы, разделители, прочее" - придётся целую лекцию читать каждому по пробелам и пробельным символам, и абсолютно точно большинство пропустит мимо ушей.

А учитывая источник данных (который может быть любым)

  1. Пользователь может сам вручную заполнить текст и в процессе заполнения случайно вбить 2 лишних пробела;

  2. Однако, не редко текст для заполнения с пробельными символами уже где-то написан (в Word-е, интернете и пр.) и его просто берут и копируют.

нужно был: короткое, мощное, покрывающее большинство случаев (надеюсь 99%) решение

И "да" регулярные выражения сложные, из-за чего однако я отважился их применить в самом что ни на есть минималистичном виде.

П.С. А вот с этим полностью соглашусь

И не потому, что я регэксп "не осилю", а потому, что у меня совершенно нет уверенности, что его быстро поймет и осилит тот, кто будет это после меня трогать когда-нибудь.

где-то статью читал с призываом не парсить html при помощи регулярных выражений, а использовать нормальные/адекватные библиотеки - вот в таком ключе 100% регулярки = антипаттерн

И по поводу функции .trim() - в Python это .strip() называется, но суть, не меняется удаляет начальные и конечные пробелы (и, "да", можно что-нибудь иное удалить но только на концах строки)

https://ru.wikipedia.org/wiki/Trim

Да, действительно, плюс/звезду забыл.

Ну и однострочник на баше, без привлечения внешних утилит:

while IFS= read -a LINE; do echo ${LINE[*]}; done < filename.txt

а мне нравиться использовать его(bash) как клей для стандартных unix/linux утилит

... | tr -s '[:space:]' ' ' | sed -e 's/^ //' -e 's/ $//'

взгляд сразу цепляется за "блоки" и легко воспринимать

На Python убрать все (любые) лишние пробельные символы ну очень просто:

' '.join(text.split())

' '.join('1\n\r\t2    3'.split())  # '1 2 3'
Sign up to leave a comment.

Articles