剥离unicode字符修饰符

时间:2013-06-13 22:36:58

标签: python unicode utf-8

从Python中的unicode字符串中剥离字符修饰符的最简单方法是什么?

例如:

A͋͠r͍̞̫̜͌ͦ̈͐t̼̭͞hu̡̙̞̘̙̬͖͓rͬͣ̐ͮͥͨ͏̣应该成为亚瑟

我尝试了文档,但找不到任何可以做到这一点。

2 个答案:

答案 0 :(得分:6)

试试这个

import unicodedata
a = u"STRING GOES HERE" # using an actual string would break stackoverflow's code formatting.
u"".join( x for x in a if not unicodedata.category(x).startswith("M") )

这将删除所有分类为标记的字符,这是我认为你想要的。通常,您可以使用unicodedata.category获取角色的类别。

答案 1 :(得分:5)

您还可以使用regex module支持的r'\p{M}'

import regex

def remove_marks(text):
    return regex.sub(ur"\p{M}+", "", text)

示例:

>>> print s
A͋͠r͍̞̫̜t̼̭͞h́u̡̙̞̘rͬͣ̐ͮ
>>> def remove_marks(text):
...     return regex.sub(ur"\p{M}+", "", text)
...     
... 
>>> print remove_marks(s)
Arthur

根据您的使用情况,白名单方法可能更好,例如,仅将输入限制为ascii字符:

>>> s.encode('ascii', 'ignore').decode('ascii')
u'Arthur'

结果可能取决于文本中使用的Unicode规范化。