以前一直有使用python 正則表達式來作中文字符串或者中英文數字混合的字符串的匹配,發現有很多狀況下會匹配失靈或者結果混亂,而且在不一樣操做系統上匹配結果也不一致,查了好久都不知道是什麼緣由。今天終於完全弄懂了,原來仍是python中對中文的編碼問題形成的。python
解決辦法:正則表達式
step1 在設置默認編碼爲UTF8以後,將正則表達式和待匹配字符串都decode("utf8")統一成 unicode再進行匹配;微信
step2 正則表達式前面必定要加 r ;編碼
示例代碼:spa
kw_regexp = r'微信'+ kw_str.decode("utf8") pattern = re.compile(kw_regexp, re.I) result = pattern.search(cont.decode("utf8"))
其中,cont是待匹配字符串,kw_regexp是拼接來的正則表達式字符串,前面必定要加"r"。操作系統