Python Pampy是Python模式中一個(gè)比較常見的數(shù)據(jù)庫(kù)類型,它匹配到模式庫(kù)中的內(nèi)容還是比較的多的,代碼庫(kù)雖然只有150行,但是它的代碼是更加的簡(jiǎn)潔的,能有效的提高我們的工作效率,那么,就具體的內(nèi)容,下面就給大家詳細(xì)解答下。
Pampy是哪路神仙
首先普及一下模式匹配。
模式匹配即給定某種模式,用這種模式去檢查序列或字符串是否符合這種模式,這種技術(shù)在自然語(yǔ)言處理中經(jīng)常使用。
Pampy是Python的一個(gè)模式匹配類庫(kù),一個(gè)只有150行的類庫(kù),該庫(kù)優(yōu)雅、高效值得廣大Python的碼農(nóng)加入自己基本開發(fā)棧中。
無(wú)獨(dú)有偶,該程序還有一個(gè)同名的Pampy.js的JavaScript版本庫(kù)。
你如果有興趣,可以閱讀源碼,將其照搬到更多的開發(fā)語(yǔ)言中。
安裝這個(gè)庫(kù)的方式也是老生常談了:
pip install pampy
Pampy的花式秀
匹配單個(gè)字符
我們可以用_來(lái)匹配單個(gè)字符:
from pampy import _,match a=['a',1,'b',2,'c',3,'d',4] patter=['a',1,'b',_,'c',3,'d',4] action=lambda x:f'b is:{x}' print(match(a,patter,action))
運(yùn)行結(jié)果是:
b is:2
從上面例子可以看出,實(shí)際上我們只是用_充當(dāng)一個(gè)占位符,當(dāng)匹配的時(shí)候,找到這個(gè)占位符對(duì)應(yīng)的元素即可。
匹配字典
我們可以匹配多層級(jí)的字典中的任意一個(gè)層級(jí)的key或者value:
from pampy import _,match person={ 'address':{'province':'湖北','city':'武漢','district':'東湖高新'}, 'name':'閑歡' } patter={_:{_:'武漢'}} action=lambda k1,k2:({'k1':k1,'k2':k2}) print(match(person,patter,action)) 運(yùn)行結(jié)果是: {'k1':'address','k2':'city'}
跟前一個(gè)例子類似,這里使用_這個(gè)占位符占位,然后在action里面定位占位符,即可輸出結(jié)果。
匹配開頭和結(jié)尾
上面的例子,我們都是使用占位符來(lái)占位,但是占位符只能匹配一個(gè)字符,下面的例子,我們將用HEAD和TAIL這兩個(gè)關(guān)鍵詞來(lái)匹配開頭和結(jié)尾,他們可以批評(píng)任意多個(gè)字符:
from pampy import _,match,HEAD,TAIL a=['a',1,'b',2,'c',3,'d',4] patter=[HEAD,_,'b',2,'c',3,TAIL] action=lambda h,m,t:({'head':h,'middle':m,'tail':t}) print(match(a,patter,action))
運(yùn)行上面例子,結(jié)果是:
{'head':'a','middle':1,'tail':['d',4]}
我們可以從結(jié)果看到,HEAD匹配了一個(gè)字符,TAIL匹配了兩個(gè)字符,輸出的時(shí)候,如果是多個(gè)字符,結(jié)果會(huì)以數(shù)組的方式給出。
總結(jié)
Pampy的例子都很簡(jiǎn)單,大家一閱便知。通過(guò)看著幾個(gè)例子,是不是有種感覺:哇,還有這等神器!
當(dāng)然,Pampy的模式匹配不止這么幾種方式,下面為大家解釋一下
特性1:HEAD和TAIL
HEAD和TAIL能代表某個(gè)模式的前面部分或后面部分。
比如將特定模式后的元素都變成元組:
from pampy import match,HEAD,TAIL,_ x=[-1,-2,-3,0,1,2,3] print(match(x,[-1,TAIL],lambda t:[-1,tuple(t)])) #=>[-1,(-2,-3,0,1,2,3)]
將特定模式前的元素設(shè)為集合,后面的元素設(shè)為元組:
from pampy import match,HEAD,TAIL,_ x=[-1,-2,-3,0,1,2,3] print(match(x,[HEAD,_,_,0,TAIL],lambda h,a,b,t:(set([h,a,b]),tuple(t)))) #=>({-3,-1,-2},(1,2,3))
特性2:甚至能匹配字典中的鍵
在你不知道哪個(gè)鍵下有某個(gè)值的時(shí)候,這招非常好用:
from pampy import match,HEAD,TAIL,_ my_dict={ 'global_setting':[1,3,3], 'user_setting':{ 'face':['beautiful','ugly'], 'mind':['smart','stupid'] } } result=match(my_dict,{_:{'face':_}},lambda key,son_value:(key,son_value)) print(result) #=>('user_setting',['beautiful','ugly'])
特性3:搭配正則
不僅如此,它還能搭配正則一起使用哦:
import re from pampy import match,HEAD,TAIL,_ def what_is(pet): return match( pet,re.compile('(\w+),(\w)\w+鱈魚$'),lambda mygod,you:you+"像鱈魚" ) print(what_is('我的天,你長(zhǎng)得真像鱈魚')) #=>'你像鱈魚'
上述關(guān)于Python Pampy的內(nèi)容就為大家介紹到這里了,希望可以給大家?guī)?lái)更多幫助。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/128270.html
摘要:上一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)高級(jí)用法下一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)與正則表達(dá)式抓取貓眼電影排行本節(jié)我們看一下正則表達(dá)式的相關(guān)用法,正則表達(dá)式是處理字符串的強(qiáng)大的工具,它有自己特定的語(yǔ)法結(jié)構(gòu),有了它,實(shí)現(xiàn)字符串的檢索替換匹配驗(yàn)證都不在話下。 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---25、requests:高級(jí)用法下一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---27、Requests與正則表達(dá)式抓取貓眼...
摘要:匹配個(gè)或個(gè)由前面的正則表達(dá)式定義的片段,非貪婪方式精確匹配個(gè)前面表達(dá)式。所以接著上面的例子,我們可以改寫一下正則表達(dá)式。因此,我們可以在使用來(lái)簡(jiǎn)化正則表達(dá)式的書寫。 作者:畢來(lái)生微信:878799579 正則表達(dá)式本節(jié)我們看一下正則表達(dá)式的相關(guān)用法,正則表達(dá)式是處理字符串的強(qiáng)大的工具,它有自己特定的語(yǔ)法結(jié)構(gòu),有了它,實(shí)現(xiàn)字符串的檢索、替換、匹配驗(yàn)證都不在話下。 當(dāng)然對(duì)于爬蟲來(lái)說(shuō),有了...
摘要:下面代碼會(huì)存在什么問題,如何改進(jìn)一行代碼輸出之間的所有偶數(shù)。簡(jiǎn)述進(jìn)程之間如何通信多路復(fù)用的作用模型的區(qū)別什么是并發(fā)和并行解釋什么是異步非阻塞的作用面試題說(shuō)說(shuō)你知道的命令如何查看某次提交修改的內(nèi)容答案掃碼下面的二維碼訂閱即可獲取。 引言 最近在刷面試題,所以需要看大量的 Python 相關(guān)的面試題,從大量的題目中總結(jié)了很多的知識(shí),同時(shí)也對(duì)一些題目進(jìn)行拓展了,但是在看了網(wǎng)上的大部分面試題不...
摘要:正則表達(dá)式是定義搜索模式的字符序列。通常這種模式被字符串搜索算法用于字符串上的查找或查找和替換操作,或者用于輸入驗(yàn)證。 正則表達(dá)式是定義搜索模式的字符序列。通常這種模式被字符串搜索算法用于字符串上的查找或查找和替換操作,或者用于輸入驗(yàn)證。 1. 正則表達(dá)式的語(yǔ)法 . 表示任何單個(gè)字符 [] 字符集,對(duì)單個(gè)字符給出取值范圍 [^] 非字符集,對(duì)單個(gè)字符給出排除范圍 *前一個(gè)字符0次或者...
摘要:正則表達(dá)式就是用來(lái)描述他稱為正則集的代數(shù)的表達(dá)式,因此采用正則表達(dá)式這個(gè)術(shù)語(yǔ)。文本中正則表達(dá)式結(jié)束搜索的索引值與和方法的同名參數(shù)相同。對(duì)象是一個(gè)編號(hào)的正則表達(dá)式通過(guò)提供的一系列方法可以對(duì)文本進(jìn)行匹配查找。 一、概述 今天這篇文章帶領(lǐng)大家學(xué)習(xí)一下Python中的正則表達(dá)式,當(dāng)然了,正則表達(dá)式本身的內(nèi)容就足以寫好幾本書了,我們這里列出的內(nèi)容,僅僅是Python中常用的和基礎(chǔ)的一些內(nèi)容。 那...
閱讀 926·2023-01-14 11:38
閱讀 899·2023-01-14 11:04
閱讀 758·2023-01-14 10:48
閱讀 2063·2023-01-14 10:34
閱讀 965·2023-01-14 10:24
閱讀 844·2023-01-14 10:18
閱讀 512·2023-01-14 10:09
閱讀 590·2023-01-14 10:02