Python - убрать все символы из слов, кроме букв - оптимизация
Разделил длинный текст на отдельные слова, вот пример нескольких слов:
- Привет!!!
- -где-то
- ;приехать
- =>>Hello
- пол-лимона;
- попросил))))
- !!!
- Ёжик1
- а
Требуется теперь очистить все символы в словах кроме букв и кроме дефисов внутри слов. Применил такую логику - ищем первую букву в начале слова и последнюю в конце, это и является началом и концом очищенного слова. Мне кажется немного топорное решение, может есть более интересные или упрощенные варианты? Через регулярное выражение, как понимаю, не получится, так как тогда внутри слова уберутся дефисы. Написал следующий код.
Ответы (2 шт):
Автор решения: dzhukov
→ Ссылка
list=['Привет!!!',
'-где-то',
';приехать',
'=>>Hello',
'пол-лимона;',
'попросил))))',
'!!!',
' ',
'Ёжик1',
'а'
]
def Get_Clean_Word (word):
#word=WordDirty
for i in range(len(word)):
letter=word[i].encode('windows-1251')
start=-1
if 192<=ord(letter)<=255 or ord(letter)==168 or ord(letter)==184 or 65<=ord(letter)<=90 or 97<=ord(letter)<=122:
start=i
break
for i in range(len(word)):
letter = word[len(word)-i-1].encode('windows-1251')
if 192<=ord(letter)<=255 or ord(letter)==168 or ord(letter)==184 or 65<=ord(letter)<=90 or 97<=ord(letter)<=122:
end=len(word)-i
break
if start==-1:
clean_word=''
else:
clean_word=word[start:end]
return (clean_word)
list_clean=[]
for WordDirty in list:
list_clean.append(Get_Clean_Word(WordDirty))
print(list_clean)
Автор решения: gil9red
→ Ссылка
Использовал регулярку, чтобы удалить все символы, что не подходят нам: не буквы и не дефисы. После удалил слева и справа дефисы.
Пример:
import re
words = [
'Привет!!!',
'-где-то',
';приехать',
'=>>Hello',
'пол-лимона;',
'попросил))))',
'!!!',
' ',
'Ёжик1',
'а',
"П_Р_И_В_Е_Т"
]
def get_clean_word(word: str) -> str:
word = re.sub('[^a-zа-яё-]', '', word, flags=re.IGNORECASE)
word = word.strip('-')
return word
list_clean = [get_clean_word(word) for word in words]
print(list_clean)
# ['Привет', 'где-то', 'приехать', 'Hello', 'пол-лимона', 'попросил', '', '', 'Ёжик', 'а', 'ПРИВЕТ']