从Python中的unicode字符串中剥离字符修饰符的最简单方法是什么?
例如:
A͋͠r͍̞̫̜͌ͦ̈͐t̼̭͞hu̡̙̞̘̙̬͖͓rͬͣ̐ͮͥͨ͏̣应该成为亚瑟
我尝试了文档,但找不到任何可以做到这一点。
答案 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规范化。