2017-09-11 27 views
0

您需要刪除/替換任何單個德語字符,例如ü你如何讓re.sub()理解unicode?

import re 
re.sub(r'^\w{1}$', '', u'ü', re.U) 
> u'\xfc' 

上面的代碼不工作,但爲什麼如果:

re.Ure.UNICODE 爲\ W,\ W,\ B,\ B, \ d,\ D,\ s和\ S序列依賴於Unicode字符屬性數據庫。還爲IGNORECASE啓用非ASCII匹配。

+0

你可能不應該用這種方式替換國際字符。有更好的解決方案,比如'unidecode'模塊甚至'str.translate()'。 – hop

回答

1

re.sub()flags作爲第5個參數,而不是第4個參數。第四個是count。這將工作:

>>> re.sub(r'^\w$', '', u'ü', flags=re.U) 
u'' 
+0

@Novaterata:如果它是爲了人類消費,爲什麼要以一種會改變或破壞意義的方式來代替它?使用'unidecode'。如果它不適合人類消費,爲什麼你必須更換它?如果你想替換一個特定的字符,爲什麼使用're.sub'而不是'.replace()'?.如果你想替換多個,爲什麼使用重複的'.replace()'而不是'.translate()'?幾乎總是比正則表達式更好。它取決於上下文,但OP沒有給我們任何(並且在任何情況下都處於錯誤的軌道上)。 – hop

+0

@Novaterata:問題和答案是不夠的,因爲它們是。 – hop

+0

老實說,python2.7文檔應該強調使用'flags'這個詞,因爲它在文檔中也被錯誤地使用,因此不斷混淆。 – minerals