国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

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

2019-11-25 16:23:36
字體:
來源:轉載
供稿:網友

本文實例講述了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中得到“本站主數據:”那部分的信息。

下面是我摸索的代碼

#!/usr/bin/env python#encoding: utf-8#date: 2016-03-31#note: 測試中遇到的問題,請求指定的鏈接會有超時現象,可以多請求幾次import requests, reimport sysreload(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 datadef 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)

下面是截圖

PS:這里再為大家提供2款非常方便的正則表達式工具供大家參考使用:

JavaScript正則表達式在線測試工具:
http://tools.VeVB.COm/regex/javascript

正則表達式在線生成工具:
http://tools.VeVB.COm/regex/create_reg

更多關于Python相關內容可查看本站專題:《Python正則表達式用法總結》、《Python數據結構與算法教程》、《Python Socket編程技巧總結》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》、《Python入門與進階經典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對大家Python程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 曲靖市| 资溪县| 长汀县| 莱西市| 泾源县| 长阳| 隆林| 定远县| 张掖市| 朝阳县| 东阿县| 武邑县| 龙胜| 枝江市| 奉贤区| 阳新县| 祁门县| 汉源县| 肇源县| 盈江县| 公安县| 乐至县| 健康| 方山县| 阜城县| 西吉县| 西林县| 胶南市| 青川县| 怀远县| 区。| 抚顺市| 山西省| 晋宁县| 怀集县| 甘泉县| 曲阜市| 洪泽县| 延寿县| 阳信县| 湖州市|