亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2017年01月20日 09:08:21   作者:雪峰流云  
這篇文章主要介紹了Python使用中文正則表達(dá)式匹配指定中文字符串的方法,結(jié)合實(shí)例形式分析了Python正則匹配及字符編碼相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了Python使用中文正則表達(dá)式匹配指定中文字符串的方法。分享給大家供大家參考,具體如下:

業(yè)務(wù)場(chǎng)景:

從中文字句中匹配出指定的中文子字符串 .這樣的情況我在工作中遇到非常多, 特梳理總結(jié)如下.

難點(diǎn):

處理GBK和utf8之類(lèi)的字符編碼, 同時(shí)正則匹配Pattern中包含漢字,要漢字正常發(fā)揮作用,必須非常謹(jǐn)慎.推薦最好統(tǒng)一為utf8編碼,如果不是這種最優(yōu)情況,也有酌情處理.

往往一個(gè)具有普適性的正則表達(dá)式會(huì)簡(jiǎn)化程序和代碼的處理,使過(guò)程簡(jiǎn)潔和事半功倍,這往往是高手和菜鳥(niǎo)最顯著的差別。

示例一:

從QQ純真數(shù)據(jù)庫(kù)中解析出省市縣等特定詞語(yǔ),這里的正則表達(dá)式基本能夠滿(mǎn)足業(yè)務(wù)場(chǎng)景,懶惰匹配?非常必要,因?yàn)樘幚聿缓?,?huì)得不到我們想要的效果。個(gè)中妙處,還請(qǐng)各位看官自己琢磨,我這里只點(diǎn)到為止!
代碼如下:

#!/usr/bin/env python
#encoding: utf-8
#description: 從字符串中提取省市縣等名稱(chēng),用于從純真庫(kù)中解析解析地理數(shù)據(jù)
import re
import sys
reload(sys)
sys.setdefaultencoding('utf8')
#匹配規(guī)則必須含有u,可以沒(méi)有r
#這里第一個(gè)分組的問(wèn)號(hào)是懶惰匹配,必須這么做
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ū)', '黑龍江省佳木斯市湯原縣', '內(nèi)蒙古自治區(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 = '中國(guó)'
 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

運(yùn)行截圖

示例二:

從ip138中獲取指定ip的地理位置等信息。

ip138是我們?nèi)粘J褂幂^多的ip查詢(xún)網(wǎng)站,我為了獲取每個(gè)ip對(duì)應(yīng)的isp信息,需要查詢(xún)這個(gè)頁(yè)面

我在網(wǎng)上搜索了很久,沒(méi)有找到ip138返回json之類(lèi)的接口,只能以這種方式查詢(xún),那么我們不可避免地需要解析出上圖中紅框標(biāo)注的isp信息。如果使用DOM解析指定div標(biāo)簽之類(lèi)的常規(guī)思路恐怕不太湊效,更簡(jiǎn)捷的方式是使用中文正則匹配,直接從返回的html中得到“本站主數(shù)據(jù):”那部分的信息。

下面是我摸索的代碼

#!/usr/bin/env python
#encoding: utf-8
#date: 2016-03-31
#note: 測(cè)試中遇到的問(wèn)題,請(qǐng)求指定的鏈接會(huì)有超時(shí)現(xiàn)象,可以多請(qǐng)求幾次
import requests, re
import sys
reload(sys)
sys.setdefaultencoding('utf8')
IP138_API = 'http://www.ip138.com/ips138.asp?ip='
PATTERN = ur'<li>本站主數(shù)據(jù):(.*?)</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編碼,不能在后面再轉(zhuǎn)換為utf-8,否則無(wú)法正則匹配上.
 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款非常方便的正則表達(dá)式工具供大家參考使用:

JavaScript正則表達(dá)式在線(xiàn)測(cè)試工具:
http://tools.jb51.net/regex/javascript

正則表達(dá)式在線(xiàn)生成工具:
http://tools.jb51.net/regex/create_reg

更多關(guān)于Python相關(guān)內(nèi)容可查看本站專(zhuān)題:《Python正則表達(dá)式用法總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門(mén)與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • python裝飾器中@property屬性的使用解析

    python裝飾器中@property屬性的使用解析

    這篇文章主要介紹了python裝飾器中@property屬性的使用解析,property屬性是一種用起來(lái)像是使用的實(shí)例屬性一樣的特殊屬性,可以對(duì)應(yīng)于某個(gè)方法,需要的朋友可以參考下
    2023-09-09
  • Python簡(jiǎn)單刪除列表中相同元素的方法示例

    Python簡(jiǎn)單刪除列表中相同元素的方法示例

    這篇文章主要介紹了Python簡(jiǎn)單刪除列表中相同元素的方法,結(jié)合具體實(shí)例形式分析了Python使用list、set方法針對(duì)列表元素的去重與排序操作實(shí)現(xiàn)技巧,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下
    2017-06-06
  • pytest-sugar?執(zhí)行過(guò)程中顯示進(jìn)度條的腳本分享

    pytest-sugar?執(zhí)行過(guò)程中顯示進(jìn)度條的腳本分享

    Pytest-sugar是一款用來(lái)改善控制臺(tái)顯示的插件,增加了進(jìn)度條顯示,使得在用例執(zhí)行過(guò)程中可以看到進(jìn)度條,而且進(jìn)度條是根據(jù)用例是否通過(guò)標(biāo)注不同顏色,非常醒目,接下來(lái)通過(guò)本文給大家分享下pytest?sugar?顯示進(jìn)度條的腳本,感興趣的朋友一起看看吧
    2022-12-12
  • python合并多個(gè)excel文件的示例

    python合并多個(gè)excel文件的示例

    這篇文章主要介紹了python合并多個(gè)excel文件的示例,幫助大家提高辦公效率,感興趣的朋友可以了解下
    2020-09-09
  • python自動(dòng)翻譯實(shí)現(xiàn)方法

    python自動(dòng)翻譯實(shí)現(xiàn)方法

    這篇文章主要介紹了python自動(dòng)翻譯實(shí)現(xiàn)方法,涉及Python調(diào)用百度接口及數(shù)據(jù)庫(kù)操作的相關(guān)技巧,需要的朋友可以參考下
    2016-05-05
  • Python中優(yōu)雅處理JSON文件的方法實(shí)例

    Python中優(yōu)雅處理JSON文件的方法實(shí)例

    JSON是一種輕量級(jí)的數(shù)據(jù)交換格式,JSON采用完全獨(dú)立于語(yǔ)言的文本格式,但是也使用了類(lèi)似于C語(yǔ)言家族的習(xí)慣,這篇文章主要給大家介紹了關(guān)于Python中優(yōu)雅處理JSON文件的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • Python如何實(shí)現(xiàn)的二分查找算法

    Python如何實(shí)現(xiàn)的二分查找算法

    在本篇文章里小編給大家分享的是一篇關(guān)于Python實(shí)現(xiàn)的二分查找算法實(shí)例講解內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2020-05-05
  • Python IDLE 錯(cuò)誤:IDLE''''s subprocess didn''''t make connection 的解決方案

    Python IDLE 錯(cuò)誤:IDLE''''s subprocess didn''''t make connectio

    這篇文章主要介紹了Python IDLE 錯(cuò)誤:IDLE's subprocess didn't make connection 的解決方案的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • python簡(jiǎn)單線(xiàn)程和協(xié)程學(xué)習(xí)心得(分享)

    python簡(jiǎn)單線(xiàn)程和協(xié)程學(xué)習(xí)心得(分享)

    下面小編就為大家?guī)?lái)一篇python簡(jiǎn)單線(xiàn)程和協(xié)程學(xué)習(xí)心得(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • 【Python】Python的urllib模塊、urllib2模塊批量進(jìn)行網(wǎng)頁(yè)下載文件

    【Python】Python的urllib模塊、urllib2模塊批量進(jìn)行網(wǎng)頁(yè)下載文件

    這篇文章主要介紹了Python的urllib模塊、urllib2模塊批量進(jìn)行網(wǎng)頁(yè)下載文件,就是一個(gè)簡(jiǎn)單的從網(wǎng)頁(yè)抓取數(shù)據(jù)、下載文件的小程序,需要的可以了解一下。
    2016-11-11

最新評(píng)論