Инструменты Python для работы с Unicode включают модуль unicodedata, в котором есть некоторые инструменты для решения этой проблемы. Тестирование вещей на основе «символ за символом» и попытка проверить все возможные комбинации акцентированных латинских букв в структуре «if_esque» не только выглядят и чувствуют себя плохо: это плохой подход.
Одним из самых основных инструментов для работы с юникодом является получение самих имен символов - все латинские буквы имеют в своем имени «ЛАТИН», а все кириллические символы имеют в своем имени «КИРИЛЛИЦУ».
In [1]: import unicodedata
In [2]: unicodedata.name("ã")
Out[2]: 'LATIN SMALL LETTER A WITH TILDE'
In [3]: unicodedata.name("ы")
Out[3]: 'CYRILLIC SMALL LETTER YERU'
Ваша стратегия будет отличаться, если вы хотите сохранить пробелы, цифры и т. д., но в основном, если вы хотите удалить все символы, отличные от кириллицы:
In [7]: s = 'A ligeira raposa marrom ataca o cão preguiçoso Быстрая коричневая лиса прыгает через ленивую собаку +='
...:
In [8]: print(''.join(char for char in s if 'CYRILLIC' in unicodedata.name(char)))
Быстраякоричневаялисапрыгаетчерезленивуюсобаку
И наоборот, если вы хотите сохранить все и убрать все латинские символы:
In [9]: print(''.join(char for char in s if 'LATIN' not in unicodedata.name(char)))
Быстрая коричневая лиса прыгает через ленивую собаку +=
Только с этой информацией можно достичь своей цели, хотя в символах больше метаданных юникода, чем их имя, например их «категория». Если вам нужно уточнить фильтры, unicodedata.category(...)
вернет двухсимвольный код для категории символов. Все буквы (независимо от алфавита) будут иметь «L» в первой позиции этого кода, например:
In [10]: unicodedata.category("a")
Out[10]: 'Ll'
In [11]: unicodedata.category("ã")
Out[11]: 'Ll'
In [12]: unicodedata.category("л")
Out[12]: 'Ll'
In [13]: unicodedata.category("A")
Out[13]: 'Lu'
In [14]: unicodedata.category("2")
Out[14]: 'Nd'
person
jsbueno
schedule
14.04.2020
s.encode()
(кодировка в UTF-8) может помочь вам с некоторыми идеями. По крайней мере, для этого примера представление в байтах выглядит очень по-разному для каждого слова языка. - person boechat107   schedule 13.04.2020