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