Python正则表达式将字符串中的非ascii字符转换为最接近的ascii等价物

时间:2010-09-30 18:46:10

标签: python regex character-encoding ascii special-characters

我正在寻找简单的Python函数,它接受一个字符串并返回一个类似的字符串,但所有非ascii字符都转换为它们最接近的ascii等价物。 例如,应该删除变音符号等。 我想象必须有一个非常规范的方法来做这个并且有很多相关的stackoverflow问题,但我找不到一个简单的答案所以它似乎值得一个单独的问题。

输入/输出示例:

"Étienne" -> "Etienne"

4 个答案:

答案 0 :(得分:4)

阅读这个问题让我去寻找更好的东西。

https://pypi.python.org/pypi/Unidecode/0.04.1

完全符合你的要求。

答案 1 :(得分:2)

在Python 3中使用PyPI的正则表达式实现:

http://pypi.python.org/pypi/regex

从字符串开始:

>>> s = "Étienne"

归一化为NFKD然后去除变音符号:

>>> import unicodedata
>>> import regex
>>> regex.sub(r"\p{Mn}", "", unicodedata.normalize("NFKD", s))
'Etienne'

答案 2 :(得分:1)

搜索'iconv TRANSLIT python'我发现: http://www.tablix.org/~avian/blog/archives/2009/01/unicode_transliteration_in_python/看起来可能就是你所需要的。这些评论还有其他一些使用标准库的想法。

还有http://web.archive.org/web/20070807224749/http://techxplorer.com/2006/07/18/converting-unicode-to-ascii-using-python/使用NFKD来获取可能的基本字符。

答案 3 :(得分:1)

阅读一些重复问题的答案。 NFKD噱头仅作为重点剥离器。它不处理连字和许多其他不能(或没有)分解的基于拉丁语的字符。为此,准备好的翻译表是必要的(并且要快得多)。