99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀Python使用中文正則表達式匹配指定中文字符串的方法示例
Python使用中文正則表達式匹配指定中文字符串的方法示例
2017-11-22
收藏

Python使用中文正則表達式匹配指定中文字符串的方法示例

本文實例講述了Python使用中文正則表達式匹配指定中文字符串的方法。分享給大家供大家參考,具體如下:
業(yè)務場景:
從中文字句中匹配出指定的中文子字符串 .這樣的情況我在工作中遇到非常多, 特梳理總結如下.
難點:
處理GBK和utf8之類的字符編碼, 同時正則匹配Pattern中包含漢字,要漢字正常發(fā)揮作用,必須非常謹慎.推薦最好統一為utf8編碼,如果不是這種最優(yōu)情況,也有酌情處理.
往往一個具有普適性的正則表達式會簡化程序和代碼的處理,使過程簡潔和事半功倍,這往往是高手和菜鳥最顯著的差別。
示例一:
從QQ純真數據庫中解析出省市縣等特定詞語,這里的正則表達式基本能夠滿足業(yè)務場景,懶惰匹配?非常必要,因為處理不好,會得不到我們想要的效果。個中妙處,還請各位看官自己琢磨,我這里只點到為止!
代碼如下:    
#!/usr/bin/env python
#encoding: utf-8
#description: 從字符串中提取省市縣等名稱,用于從純真庫中解析解析地理數據
import re
import sys
reload(sys)
sys.setdefaultencoding('utf8')
#匹配規(guī)則必須含有u,可以沒有r
#這里第一個分組的問號是懶惰匹配,必須這么做
PATTERN = \
ur'([\u4e00-\u9fa5]{2,5}?(?:省|自治區(qū)|市))([\u4e00-\u9fa5]{2,7}?(?:市|區(qū)|縣|州)){0,1}([\u4e00-\u9fa5]{2,7}?(?:市|區(qū)|縣)){0,1}'
data_list = ['北京市', '陜西省西安市雁塔區(qū)', '西班牙', '北京市海淀區(qū)', '黑龍江省佳木斯市湯原縣', '內蒙古自治區(qū)赤峰市',
'貴州省黔南州貴定縣', '新疆維吾爾自治區(qū)伊犁州奎屯市']
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標簽之類的常規(guī)思路恐怕不太湊效,更簡捷的方式是使用中文正則匹配,直接從返回的html中得到“本站主數據:”那部分的信息。
下面是我摸索的代碼    
#!/usr/bin/env python
#encoding: utf-8
#date: 2016-03-31
#note: 測試中遇到的問題,請求指定的鏈接會有超時現象,可以多請求幾次
import requests, re
import sys
reload(sys)
sys.setdefaultencoding('utf8')
IP138_API = 'http://www.ip138.com/ips138.asp?ip='
PATTERN = ur'<li>本站主數據:(.*?)</li>'
def query_api(url):
 data = ''
 r = requests.get(url)
 if r.status_code == 200:
  data = r.content
 return data
def parse_ip138(html):
 #只能是unicode編碼,不能在后面再轉換為utf-8,否則無法正則匹配上.
 html = unicode(html, 'gb2312')
 #html = unicode(html, 'gb2312').encode('utf-8')
 #print html
 pattern = re.compile(PATTERN)
 m = pattern.search(html)
 if m:
  print m.group(1)
 else:
  print 'regex match failed'
if __name__ == '__main__':
 url = IP138_API + '14.192.60.0'
 resp = query_api(url)
 if not resp:
  print 'no content'
 parse_ip138(resp)

下面是截圖

數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調用 initGeetest 進行初始化 // 參數1:配置參數 // 參數2:回調,回調的第一個參數驗證碼對象,之后可以使用它調用相應的接口 initGeetest({ // 以下 4 個配置參數為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產品形式,包括:float,popup width: "280px", https: true // 更多配置參數說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }