1

我需要将德语变音符号(ÄäÖöÜüß)替换为它们的两个字母等效项(AeaeOeoeUeuess)。

目前,我有这个功能,但字符串的长度发生了变化:

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

非常感谢您在推导适当的解决方案(正则表达式?)方面的任何帮助:)

4

2 回答 2

1

...字符串的总长度不应改变。

嗯,这是一个奇怪的要求,但是

patt = re.compile("([" + "".join(trans.keys()) + "]).")

请注意,如果它是字符串中的最后一个字符,这将不会替换变音符号。由于显而易见的原因,这会改变字符串的长度。

于 2013-10-11T09:50:31.707 回答
1

只需截断回原始字符串长度:

return patt.sub(lambda x: trans[x.group()], s)[:len(s)]
于 2013-10-11T10:00:08.330 回答