Comments 19
Код на Python повторяет код на VBS.
На Python вроде бы как то так: re.sub(r'\s+', ' ', str)
s/\s+/ /g точно стоит написания целой статьи?
А, пардон – ещё trim. s/^ | $//g (если именно регэкспом)
Честно скажу - не знаю. Да и хотел покороче а "мыслию по древу растёкся" (
Просто видел вот такое (и не единожды в разных интерпретациях):
https://sky.pro/media/udalenie-lishnih-probelov-v-stroke-v-python/?ysclid=mezypmjc8s446455963
Такое ощущение, что многие сознательно обходят тему регулярных выражений. Всё что угодно, лишь бы их не использовать, может реально кто-то не слышал...
Скажем так: эта статья - компенсация за боль ручной вычистки )
Такое ощущение, что многие сознательно обходят тему регулярных выражений. Всё что угодно, лишь бы их не использовать, может реально кто-то не слышал...
Надо смотреть язык, конкретные реализации и входные данные. Так то создать обьект RegExp и скомпилировать выражение может оказаться недешово по накладным расходам.
Слишком редко регулярные выражения приносят профит по производительности. Как следствие ими нечасто пользуются. Их логика не самая простая, и есть изрядно грабель.
Всё вместе приводит к тому, что если мы не ожидаем прям "много строк", яб написал явно "заменить все табуляции на пробелы", "заменить все переводы строки на пробелы" итд итп, а потом "заменить два пробела на один пока что-то меняется". Да - это, возможно будет медленнее, но если быстро не требуется - это не проблема.
И не потому, что я регэксп "не осилю", а потому, что у меня совершенно нет уверенности, что его быстро поймет и осилит тот, кто будет это после меня трогать когда-нибудь.
Тут как с рекурсией. Лучше поберечься. Если можно.
На сколько понял речь идёт об обработке строки где-то до 1000 символов перед записью в бд. В таком случае Python и функция с регуляркой подходят больше всего.
А если данные нормализовать в Jupyter блокноте, то ваш способ будет понятней, чтобы отобразить логику каждого шага измения источника.
мммм, понимаю, что можем уйти в дискуссию, скажу мягко, что только частично согласен
яб написал явно "заменить все табуляции на пробелы", "заменить все переводы строки на пробелы"
К сожалению много пользователей было (> 100; < 1000) и к каждому лично не сходишь и не скажешь: "пожалуйста, не используйте: табы, разделители, прочее" - придётся целую лекцию читать каждому по пробелам и пробельным символам, и абсолютно точно большинство пропустит мимо ушей.
А учитывая источник данных (который может быть любым)
Пользователь может сам вручную заполнить текст и в процессе заполнения случайно вбить 2 лишних пробела;
Однако, не редко текст для заполнения с пробельными символами уже где-то написан (в Word-е, интернете и пр.) и его просто берут и копируют.
нужно был: короткое, мощное, покрывающее большинство случаев (надеюсь 99%) решение
И "да" регулярные выражения сложные, из-за чего однако я отважился их применить в самом что ни на есть минималистичном виде.
П.С. А вот с этим полностью соглашусь
И не потому, что я регэксп "не осилю", а потому, что у меня совершенно нет уверенности, что его быстро поймет и осилит тот, кто будет это после меня трогать когда-нибудь.
где-то статью читал с призываом не парсить html при помощи регулярных выражений, а использовать нормальные/адекватные библиотеки - вот в таком ключе 100% регулярки = антипаттерн
И по поводу функции .trim() - в Python это .strip() называется, но суть, не меняется удаляет начальные и конечные пробелы (и, "да", можно что-нибудь иное удалить но только на концах строки)
s/^\s+|\s+$//g
Ну и однострочник на баше, без привлечения внешних утилит:
while IFS= read -a LINE; do echo ${LINE[*]}; done < filename.txt
На Python убрать все (любые) лишние пробельные символы ну очень просто:
' '.join(text.split())
' '.join('1\n\r\t2 3'.split()) # '1 2 3'
Чистим строку от лишних/повторяющихся пробелов (и пробельных символов) в строковых значениях компактно. RegExp