您需要刪除/替換任何單個德語字符,例如ü
。你如何讓re.sub()理解unicode?
import re
re.sub(r'^\w{1}$', '', u'ü', re.U)
> u'\xfc'
上面的代碼不工作,但爲什麼如果:
re.U, re.UNICODE 爲\ W,\ W,\ B,\ B, \ d,\ D,\ s和\ S序列依賴於Unicode字符屬性數據庫。還爲IGNORECASE啓用非ASCII匹配。
您需要刪除/替換任何單個德語字符,例如ü
。你如何讓re.sub()理解unicode?
import re
re.sub(r'^\w{1}$', '', u'ü', re.U)
> u'\xfc'
上面的代碼不工作,但爲什麼如果:
re.U, re.UNICODE 爲\ W,\ W,\ B,\ B, \ d,\ D,\ s和\ S序列依賴於Unicode字符屬性數據庫。還爲IGNORECASE啓用非ASCII匹配。
re.sub()
以flags
作爲第5個參數,而不是第4個參數。第四個是count
。這將工作:
>>> re.sub(r'^\w$', '', u'ü', flags=re.U)
u''
@Novaterata:如果它是爲了人類消費,爲什麼要以一種會改變或破壞意義的方式來代替它?使用'unidecode'。如果它不適合人類消費,爲什麼你必須更換它?如果你想替換一個特定的字符,爲什麼使用're.sub'而不是'.replace()'?.如果你想替換多個,爲什麼使用重複的'.replace()'而不是'.translate()'?幾乎總是比正則表達式更好。它取決於上下文,但OP沒有給我們任何(並且在任何情況下都處於錯誤的軌道上)。 – hop
@Novaterata:問題和答案是不夠的,因爲它們是。 – hop
老實說,python2.7文檔應該強調使用'flags'這個詞,因爲它在文檔中也被錯誤地使用,因此不斷混淆。 – minerals
你可能不應該用這種方式替換國際字符。有更好的解決方案,比如'unidecode'模塊甚至'str.translate()'。 – hop