from string import ascii_letters, digits, punctuation
s = 'A ligeira raposa marrom ataca o cão preguiçoso Быстрая коричневая лиса прыгает через ленивую собаку +='
# first + second string are translations, last string will be removed from result
to_be_removed = ascii_letters + digits + punctuation + "+=áâãàçéêíóôõú"
t = str.maketrans("", "", to_be_removed)
k = s.translate(t)
print(k.strip())
输出
Быстрая коричневая лиса прыгает через ленивую собаку
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)))
Быстрая коричневая лиса прыгает через ленивую собаку +=
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'
您可以使用str.translate从字符串中删除字母,并将其替换为零-我在这里使用了一些字符串常量(请参见f.e.string.ascii_letters):
输出
您还需要向string.ascii_添加更多的非
ascii_letters
字母来删除它们。我从Portuguese orthography: Diacritics手动获取它们,这是一次手动操作这似乎不是一个与Python相关的问题,我还要说它与编程无关
然而,正如往常一样,StackExchange网络上有一个答案,这次是在语言学网站上:https://linguistics.stackexchange.com/questions/28766/character-sets-for-top-100-languages-as-opposed-to-unicode
Python处理Unicode的工具以Unicode数据模块为特色,该模块有一些工具来处理这个问题。 在“一个字符一个字符”的基础上进行测试,并尝试在“如果”式结构中检查所有可能的重音拉丁字母组合,不仅外观和感觉都不好:这是一种糟糕的方法
处理unicode最基本的工具之一是获取字符名称本身——所有拉丁字母的名称中都有“拉丁”,所有西里尔字母的名称中都有“西里尔字母”
如果您想保留空格、数字等,您的策略会有所不同,但基本上,如果您想删除所有非西里尔字母字符:
相反,如果要保留所有内容并删除所有拉丁字符:
仅凭这些信息,就有可能实现您的目标——尽管字符中的unicode元数据比它们的名称更多,比如它们的“类别”。如果你需要 优化过滤器,
unicodedata.category(...)
将返回两个字符的代码 对于角色类别。所有字母(不考虑字母表)中都有“L” 该代码的第一个位置,例如:相关问题 更多 >
编程相关推荐