我需要更换德国元音(Ä,ä,Ö,ö,Ü ,ü,ß)及其两个字母的等价物( Ae , ae , Oe , oe , Ue , ue , ss )。
目前,我有这个功能,但字符串的长度发生了变化:
def _translate_umlauts(s):
"""Translate a string into ASCII.
This Umlaut translation comes from http://stackoverflow.com/a/2400577/152439
"""
trans = {"\xe4" : "ae"} # and more ...
patt = re.compile("|".join(trans.keys()))
return patt.sub(lambda x: trans[x.group()], s)
但是,我要求字符串的总长度不应该改变。例如,Mär应该成为 Mae 。
非常感谢任何帮助推导出适当的解决方案(正则表达式?):)
答案 0 :(得分:1)
......字符串的总长度不应改变。
嗯,这是一个奇怪的要求,但是
patt = re.compile("([" + "".join(trans.keys()) + "]).")
请注意,如果它是字符串中的最后一个字符,则不会替换该变音符号。由于显而易见的原因,这会改变字符串长度。
答案 1 :(得分:1)
只需截断回原始字符串长度:
return patt.sub(lambda x: trans[x.group()], s)[:len(s)]