2010-08-21 84 views
1

我給出了單個字符或字符串,並使用Python。Unicode大小寫轉換

如何根據Unicode提出的標準(標準和特殊情況映射)找出特定字符是否具有小寫等價物?

如何根據Unicode提出的標準(標準和特殊情況映射)找出字符串是否有一個或多個具有小寫字母的字符?

回答

5
def haslower(unicodechar): 
    return unicodechar != unicodechar.lower() 

def anylower(unicodestring): 
    return any(haslower(c) for c in unicodestring) 

這隻會在儘可能的Python版本您使用的正常工作是否正確實施過程中的每統一標準.lower()方法。此外,我假設您不考慮(例如,u'a')「具有小寫等價物」(當然,它具有大寫)。如果你的意思是不同的,考慮

def changescase(uc): 
    return uc != uc.lower() or uc != uc.upper() 

(我已經改名爲參數uc以避免過多的線路長度;-) - 如果這就是你想要什麼,我建議命名功能來講「小寫等價「,因爲這肯定會讓你的代碼的讀者/維護者感到困惑!)

+0

我從來沒有想到.lower(和.upper)也適用於重音字符。 – 2010-08-21 04:52:32

+0

謝謝。我在GAE中運行我的應用程序,所以它是Python 2.5.2。我問了另一個問題,以防萬一你想回答它(其他人也可以看到)。 http://stackoverflow.com/questions/3536397/does-python-version-2-5-2-follow-unicode-standards-for-lower-and-upper-functi – Albert 2010-08-21 05:06:16

1

@Albert,你似乎過分關心大小寫轉換的細節,當你還沒有理清(也沒有解釋給回答者)你真正想做的事情。

===您以前的解釋(在評論我的回答this question)嘗試===

@約翰:嗯,我其實做一個API,我的網絡服務。我的web服務接受一個映射到我的數據庫中的特定記錄的密鑰。密鑰區分大小寫,密鑰可以由任何unicode字符組成。所以爲了規範所有的輸入,我會將所有的關鍵查詢轉換成小寫(如果它們有大寫的等價物)。其結果是當我創建記錄鍵(我的用戶可以自定義)時,我無法接受任何可以通過toLower()函數轉換爲小寫等效的大寫字符。所以我試圖爲此做一個過濾器。有什麼建議麼?

===我在回答評論===

@Albert:如果你的鑰匙是大小寫敏感的,你爲什麼正常化他們??? 「用戶可以自定義的記錄鍵」意味着什麼? 「任何unicode char」vs「不能接受任何大寫字符」??? 按字面回答你的問題:當c.lower()!= c時,你不能接受字符c,這意味着如果key.lower()!= key,你不能接受任何密鑰。我認爲你應該開始一個新的問題,用實例來解釋你正在嘗試做什麼。

...你肯定問過一個新問題(實際上是2個問題),但你沒有解釋任何東西。這個「新」問題非常新,以至於@Alex Martelli的答案與我上面強調的評論基本相同。

我認爲你應該開始一個新問題,與新內容,用實例解釋你正在嘗試做什麼。

+0

好的。我將整理我正在嘗試做的事情。謝謝! – Albert 2010-08-21 14:08:49