Форум сайта python.su
alibek
Это не пробел.
Это символ U+00A0 и он не находится внутри \s.
alibek
Да, при отправке в форум символ заменился на обычный пробел.
Исходно это был символ неразрывного пробела.
>>> import unicodedata >>> >>> unicodedata.name('\xa0') 'NO-BREAK SPACE' >>> >>> '\xa0'.isspace() True >>> >>> import re >>> >>> re.sub(r'\s+', 'x', 'abc \xa0 def') 'abcxdef' >>>
alibekТак питон интерпретируемый язык, в нём никто такой ерундой не занимается. Это не ассемблер, где каждый бит надо считать. Как только от объектов отвязываются все имена, объект сразу же удаляется из памяти сборщиком мусора, который постоянно там всё чистит. Там всё для этого специально сделано изначально.
Как минимум они занимают место в каком-нибудь внутреннем указателе или словаре для области видимости функции, уж не знаю, как в питоне это реализовано.
>>> import re >>> >>> re.sub(r'[ac\xa0]+', 'x', 'abc \xa0 def') 'xbx x def' >>> >>> re.sub(r'[ac\u00a0]+', 'x', 'abc \xa0 def') 'xbx x def' >>>
Отредактировано py.user.next (Авг. 22, 2023 03:20:51)
Офлайн
Что по самой задаче. Её не надо делать так, что удалять оттуда все символы, которые не нужны. Ты ещё забыл символы из скандинавских языков, китайские иероглифы, кучу всякой пунктуации и так далее. Надо сделать наоборот. Выбрать оттуда всё, что ты хочешь видеть в итоге. Буквы любых языков, цифры, пробелы, дефисы, подчёркивания, точки, скобки (круглые, квадратные, фигурные, угловые). И когда оно выбрано, можно уже его дальше преобразовывать, потому что символы отфильтрованы. То есть тебе не нужно сидеть и перечислять всю пунктуацию, которая существует в юникоде. Но эта фильтрация тоже не финальный этап. С неё только начинается всё. Потом там ещё потребуются фильтрации, трансляции. И так постепенно ты придёшь к единому имени. Где-то и достраивать придётся имена какими-нибудь символами, которых не хватает.
Отредактировано py.user.next (Авг. 22, 2023 03:39:24)
Офлайн