2013-10-11 39 views
0

以下角色,我需要更換德語變音(ÄäÖöÜüSS )與他們的兩個字母的當量(AE奧斯特OEUe的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

在得出相應的解決方案(正則表達式?)任何幫助是極大的讚賞:)

+4

那麼,你可以正則表達式匹配'Ä.'與'Ae'取代它......但這不會,如果最後一個字符工作是'Ä',不分青紅皁白地吃下面的字符是一件很奇怪的事情,不是嗎? – Sneftel

+0

字符串長度不應該改變?這是多麼愚蠢的要求? –

+1

這很奇怪。在做完替換之後,你如何看待「löten」和「lösen」之間的區別,這兩者會導致「loeen」? – Ber

回答

1

...字符串的總長度不應改變。

嗯,這是一個奇怪的要求,但

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

注意這不會取代變音,如果它是字符串中的最後一個字符。由於顯而易見的原因,這會改變字符串長度。

1

剛截斷回到原來的字符串長度:

return patt.sub(lambda x: trans[x.group()], s)[:len(s)] 
相關問題