Найти - Пользователи
Полная версия: Упрощение строки для примерного сравнения
Начало » Python для новичков » Упрощение строки для примерного сравнения
1 2
py.user.next
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
Что по самой задаче. Её не надо делать так, что удалять оттуда все символы, которые не нужны. Ты ещё забыл символы из скандинавских языков, китайские иероглифы, кучу всякой пунктуации и так далее. Надо сделать наоборот. Выбрать оттуда всё, что ты хочешь видеть в итоге. Буквы любых языков, цифры, пробелы, дефисы, подчёркивания, точки, скобки (круглые, квадратные, фигурные, угловые). И когда оно выбрано, можно уже его дальше преобразовывать, потому что символы отфильтрованы. То есть тебе не нужно сидеть и перечислять всю пунктуацию, которая существует в юникоде. Но эта фильтрация тоже не финальный этап. С неё только начинается всё. Потом там ещё потребуются фильтрации, трансляции. И так постепенно ты придёшь к единому имени. Где-то и достраивать придётся имена какими-нибудь символами, которых не хватает.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB