我在Python中有一个Unicode字符串,我想删除所有的重音符号(变音符号).

我在网上找到了一种优雅的方法(Java):

  1. 将Unicode字符串转换为其100(字母和变音符号使用单独的字符)
  2. 删除所有Unicode类型为"diacritic"的字符.

我是否需要安装pyICU之类的库,或者只安装Python标准库就可以了?那么python 3呢?

重要提示:我希望避免使用从重音字符到非重音字符的显式映射的代码.

推荐答案

这个怎么样:

import unicodedata
def strip_accents(s):
   return ''.join(c for c in unicodedata.normalize('NFD', s)
                  if unicodedata.category(c) != 'Mn')

这也适用于希腊字母:

>>> strip_accents(u"A \u00c0 \u0394 \u038E")
u'A A \u0394 \u03a5'
>>> 

character category"Mn"代表Nonspacing_Mark,与unicodedata类似.在MiniQuark的答案中组合(我没有想到unicodedata.combing,但它可能是更好的解决方案,因为它更明确).

请记住,这些操作可能会显著改变文本的含义.口音、乌姆劳语等不是"装饰".

Python相关问答推荐

带有Postgres的Flask-Data在调用少量API后崩溃

覆盖Django rest响应,仅返回PK

计算所有前面行(当前行)中列的值

当使用keras.utils.Image_dataset_from_directory仅加载测试数据集时,结果不同

删除任何仅包含字符(或不包含其他数字值的邮政编码)的观察

将输入管道传输到正在运行的Python脚本中

如何在给定的条件下使numpy数组的计算速度最快?

如何创建一个缓冲区周围的一行与manim?

组/群集按字符串中的子字符串或子字符串中的字符串轮询数据框

导入...从...混乱

如何根据一列的值有条件地 Select 前N组?

在Django admin中自动完成相关字段筛选

Python脚本使用蓝牙运行在Windows 11与raspberry pi4

Plotly Dash Creating Interactive Graph下拉列表

下三角形掩码与seaborn clustermap bug

如何使用使用来自其他列的值的公式更新一个rabrame列?

交替字符串位置的正则表达式

在Google Drive中获取特定文件夹内的FolderID和文件夹名称

如何使用正则表达式修改toml文件中指定字段中的参数值

30个非DATETIME天内的累计金额