您会注意到 freø̯̯nt 在 ø 下方有两个倒置短号。我特别想把那个词转换成它的文字形式,这样我就可以使用 REGEX 来删除多余的短句。
在这种情况下,您不需要 codecs.encode(unicode_string, 'unicode-escape')。内存中没有字符串文字,只有字符串对象。
Unicode 字符串是 Python 中的 Unicode 代码点序列。可以使用不同的代码点编写相同的用户感知字符,例如,'Ç' 可以编写为 u'\u00c7' 和 u'\u0043\u0327'。
您可以使用NFKD Unicode normalization form 确保“breves”是分开的,以免在重复时错过它们:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
import unicodedata
s = u"freø̯̯nt"
# remove consecutive duplicate "breves"
print(re.sub(u'\u032f+', u'\u032f', unicodedata.normalize('NFKD', s)))
您能解释一下为什么您的 re.sub 命令没有任何 +1 来确保短字符是连续字符吗? (如@Paulo Freitas's answer)
re.sub('c+', 'c', text) 确保文本中没有“cc”、“ccc”、“cccc”等。有时,正则表达式会通过将'c' 替换为'c' 来做不必要的工作。但结果是一样的:文本中没有连续重复的'c'。
@Paulo Freitas's answer 的正则表达式也应该可以工作:
no_duplicates = re.sub(u'(\u032f)\\1+', r'\1', unicodedata.normalize('NFKD', s))
它仅对重复项执行替换。如果它是应用程序的瓶颈,您可以测量时间性能并查看哪个正则表达式运行得更快。