python 正則表達式 按大寫字母、中文、特殊符號分離字符串
import re def split_except_alphabetDigitChinese(unicode_str): """ @return:['matched str', ''] """ if type(unicode_str) != type(u''): try: unicode_str = unicode_str.decode('utf8') except: pass result = re.findall(u'[\u4e00-\u9fa5]+|[A-Z][a-z0-9]{2,}|[A-Z]{2,}(?![a-z])|(?![A-Z])[a-z][a-z0-9]{2,}',unicode_str) result = [t.strip() for t in result if t] #print(result) return result if __name__ == '__main__': print(split_except_alphabetDigitChinese(u'aa我們dll%Tools_exportImport like*unrealUPPERCASE09Desing09dddd'))
打印:['我們', 'dll', 'Tools', 'export', 'Import', 'like', 'unreal', 'UPPERCASE', 'Desing09dddd']
有一些不完美,例如全是大寫的單詞后面的數字沒有匹配到,不過基本滿足需求。
{2,}控制了匹配長度,我這里把2以下的長度過濾了,可以根據自己需求來修改。
由於象形文字中文很難通過字面意思來區分單詞,所以中文在正則表達式方面去按單詞來匹配是很難做到的,不像英文,可以通過首寫大寫或者一些特殊符號來區分。