1

ドイツ語のウムラウト ( ÄäÖöÜüß ) を 2 文字の対応する文字 ( 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ärMaeになります。

適切な解決策(正規表現?)を導き出すための助けは大歓迎です:)

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 に答える