本文實例講述了Python使用中文正則表達式匹配指定中文字符串的方法。分享給大家供大家參考,具體如下:
業務場景:
從中文字句中匹配出指定的中文子字符串 .這樣的情況我在工作中遇到非常多, 特梳理總結如下.
難點:
處理GBK和utf8之類的字符編碼, 同時正則匹配Pattern中包含漢字,要漢字正常發揮作用,必須非常謹慎.推薦最好統一為utf8編碼,如果不是這種最優情況,也有酌情處理.
往往一個具有普適性的正則表達式會簡化程序和代碼的處理,使過程簡潔和事半功倍,這往往是高手和菜鳥最顯著的差別。
示例一:
從QQ純真數據庫中解析出省市縣等特定詞語,這里的正則表達式基本能夠滿足業務場景,懶惰匹配?非常必要,因為處理不好,會得不到我們想要的效果。個中妙處,還請各位看官自己琢磨,我這里只點到為止!
代碼如下:
#!/usr/bin/env python#encoding: utf-8#description: 從字符串中提取省市縣等名稱,用于從純真庫中解析解析地理數據import reimport sysreload(sys)sys.setdefaultencoding('utf8')#匹配規則必須含有u,可以沒有r#這里第一個分組的問號是懶惰匹配,必須這么做PATTERN = /ur'([/u4e00-/u9fa5]{2,5}?(?:省|自治區|市))([/u4e00-/u9fa5]{2,7}?(?:市|區|縣|州)){0,1}([/u4e00-/u9fa5]{2,7}?(?:市|區|縣)){0,1}'data_list = ['北京市', '陜西省西安市雁塔區', '西班牙', '北京市海淀區', '黑龍江省佳木斯市湯原縣', '內蒙古自治區赤峰市','貴州省黔南州貴定縣', '新疆維吾爾自治區伊犁州奎屯市']for data in data_list: data_utf8 = data.decode('utf8') print data_utf8 country = data province = '' city = '' district = '' #pattern = re.compile(PATTERN3) pattern = re.compile(PATTERN) m = pattern.search(data_utf8) if not m: print country + '|||' continue #print m.group() country = '中國' if m.lastindex >= 1: province = m.group(1) if m.lastindex >= 2: city = m.group(2) if m.lastindex >= 3: district = m.group(3) out = '%s|%s|%s|%s' %(country, province, city, district) print out
運行截圖
示例二:
從ip138中獲取指定ip的地理位置等信息。
ip138是我們日常使用較多的ip查詢網站,我為了獲取每個ip對應的isp信息,需要查詢這個頁面
我在網上搜索了很久,沒有找到ip138返回json之類的接口,只能以這種方式查詢,那么我們不可避免地需要解析出上圖中紅框標注的isp信息。如果使用DOM解析指定div標簽之類的常規思路恐怕不太湊效,更簡捷的方式是使用中文正則匹配,直接從返回的html中得到“本站主數據:”那部分的信息。
下面是我摸索的代碼
新聞熱點
疑難解答