python的正則匹配unicode
阿新 • • 發佈:2019-01-29
最近用到python的正則表示式解析不同的語言,發現有不少細節很困擾人,寫下來留念。
python正則解析unicode的注意點。一是pattern前需要加u來escape unicode,而是源字串也得是unicode。因此,一個解析unicode的語句應該這樣寫
re.sub(ur'.*[\u4E00-\u9FA5]+.*', '', unicode('中文'))
對於英文,中文,日文,韓文,常見的unicode字元範圍如下
對於更細緻的unicode範圍,請參考這裡http://www.iteye.com/topic/558050epre = re.compile(r"[\s\w]+") chre = re.compile(ur".*[\u4E00-\u9FA5]+.*") jpre = re.compile(ur".*[\u3040-\u30FF\u31F0-\u31FF]+.*") hgre = re.compile(ur".*[\u1100-\u11FF\u3130-\u318F\uAC00-\uD7AF]+.*")
對於正則主要的幾個函式match,search,split,findall,sub
對於複雜的正則式,可以用repr()來檢視原始字串
另外,如果需要替換所有標點,python的寫法也有些不一樣
re.sub(r'[{}]+'.format(string.punctuation),'', name)
java裡可以這樣寫
name.replaceAll("[\\pP‘’“”]", "");
對於不確定的編碼,使用chardet來猜測編碼方式也不失為一種選擇
def autoTransformEncoding(x):
if(x == None or x == ''):
return ''
defaultEncoding = sys.getdefaultencoding()
infoencode = chardet.detect(x).get('encoding', defaultEncoding)
if(infoencode == None):
infoencode = defaultEncoding
return x.decode(infoencode,'ignore').encode('utf-8')