Python 正则表达式将非 ASCII 字符转换为最接近的 ASCII 等价字符
我在寻找一个简单的Python函数,这个函数可以接收一个字符串,然后返回一个类似的字符串,但把所有非ASCII字符转换成最接近的ASCII字符。
比如说,带有重音符号的字母之类的应该被去掉。
我想应该有一种比较标准的方法来做到这一点,网上也有很多相关的StackOverflow问题,但我没有找到一个简单的答案,所以我觉得单独问一下也值得。
示例输入/输出:
"Étienne" -> "Etienne"
4 个回答
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
在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'
6