2013-12-19 55 views
2

如何保留åäö​​但從字符串中刪除所有其他非字母數字字符? (我發現類似的問題,但似乎沒有一個正確的答案。)從字符串中刪除非字母數字,但保留編碼的非ASCII字符åäö

我試圖擴展正則表達式試圖讓它跳過åäö在子,但它似乎只是使正則表達式停止工作,讓空白這樣留下來。 我通常不用python編程,只是想幫助朋友出去,所以可能有更好的方法來清理字符串,而不是使用re。

從谷歌搜索我認爲它與Unicode有關,但沒有好的解決方案。

def ordnaText(text): 
    text = text.lower() 
    text = re.sub('\W', '', text) 
    if text.isalnum() == True: 
     return text 
+0

這是Python 2還是3? –

+0

它在2.7.x編碼 –

+0

'type(文本)'是什麼? – Eric

回答

2

您正在嘗試匹配編碼的輸入; Python 2中的raw_input()總是返回一個字節字符串。這意味着您正在使用的終端,控制檯或IDE決定了輸入使用的編碼。

試圖用正則表達式匹配非ASCII字符,使用字節串需要你完全匹配編碼字節,這通常意味着在終端環境或任何改變你的源代碼編輯器的設置會導致比賽失敗。

你想在這裏明確地解碼raw_input(),並使用Unicode匹配:

​​

sys.stdin.encoding告訴你什麼的Python認爲輸入編解碼器。使用flags=re.UNICODE專門在正則表達式引擎中開啓unicode支持。而u'\W'爲引擎提供了一個Unicode字符串文字;後者是可選的,但最好是明確的。

如果您想了解更多有關Unicode,編碼的字節串,以及它如何涉及到Python,我建議你閱讀:

+0

謝謝,非常翔實回答! –

1

嘗試使用標誌re.UNICODEre.sub()

2

您可以[^\wåäö]取代\W

但是如果字符串包含一個重音字符,則測試text.isalnum將返回false。

+0

是的,我試過,併爲一些愚蠢的原因是刪除åäö仍然:S –

+0

@ user2225454:奇怪!我用pythex.org測試過它,它似乎工作。 –

+1

你用'u'[^ \wåäö]''? – Eric

相關問題