资讯专栏INFORMATION COLUMN

Python Pampy模式匹配库怎么使用呢?

89542767 / 368人阅读

  Python Pampy是Python模式中一个比较常见的数据库类型,它匹配到模式库中的内容还是比较的多的,代码库虽然只有150行,但是它的代码是更加的简洁的,能有效的提高我们的工作效率,那么,就具体的内容,下面就给大家详细解答下。


  Pampy是哪路神仙


  首先普及一下模式匹配。


  模式匹配即给定某种模式,用这种模式去检查序列或字符串是否符合这种模式,这种技术在自然语言处理中经常使用。


  Pampy是Python的一个模式匹配类库,一个只有150行的类库,该库优雅、高效值得广大Python的码农加入自己基本开发栈中。


  无独有偶,该程序还有一个同名的Pampy.js的JavaScript版本库。


  你如果有兴趣,可以阅读源码,将其照搬到更多的开发语言中。


  安装这个库的方式也是老生常谈了:


  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))


  运行结果是:


  b is:2


  从上面例子可以看出,实际上我们只是用_充当一个占位符,当匹配的时候,找到这个占位符对应的元素即可。


  匹配字典


  我们可以匹配多层级的字典中的任意一个层级的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))
  运行结果是:
  {'k1':'address','k2':'city'}


  跟前一个例子类似,这里使用_这个占位符占位,然后在action里面定位占位符,即可输出结果。


  匹配开头和结尾


  上面的例子,我们都是使用占位符来占位,但是占位符只能匹配一个字符,下面的例子,我们将用HEAD和TAIL这两个关键词来匹配开头和结尾,他们可以批评任意多个字符:


  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))


  运行上面例子,结果是:


  {'head':'a','middle':1,'tail':['d',4]}


  我们可以从结果看到,HEAD匹配了一个字符,TAIL匹配了两个字符,输出的时候,如果是多个字符,结果会以数组的方式给出。


  总结


  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)]


  将特定模式前的元素设为集合,后面的元素设为元组:


  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('我的天,你长得真像鳕鱼'))
  #=>'你像鳕鱼'


  上述关于Python Pampy的内容就为大家介绍到这里了,希望可以给大家带来更多帮助。


文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/128270.html

相关文章

  • Python3网络爬虫实战---26、正则表达式

    摘要:上一篇文章网络爬虫实战高级用法下一篇文章网络爬虫实战与正则表达式抓取猫眼电影排行本节我们看一下正则表达式的相关用法,正则表达式是处理字符串的强大的工具,它有自己特定的语法结构,有了它,实现字符串的检索替换匹配验证都不在话下。 上一篇文章:Python3网络爬虫实战---25、requests:高级用法下一篇文章:Python3网络爬虫实战---27、Requests与正则表达式抓取猫眼...

    Pocher 评论0 收藏0
  • Python3之正则表达式详解

    摘要:匹配个或个由前面的正则表达式定义的片段,非贪婪方式精确匹配个前面表达式。所以接着上面的例子,我们可以改写一下正则表达式。因此,我们可以在使用来简化正则表达式的书写。 作者:毕来生微信:878799579 正则表达式本节我们看一下正则表达式的相关用法,正则表达式是处理字符串的强大的工具,它有自己特定的语法结构,有了它,实现字符串的检索、替换、匹配验证都不在话下。 当然对于爬虫来说,有了...

    phpmatt 评论0 收藏0
  • Python 爬虫面试题 170 道:2019 版

    摘要:下面代码会存在什么问题,如何改进一行代码输出之间的所有偶数。简述进程之间如何通信多路复用的作用模型的区别什么是并发和并行解释什么是异步非阻塞的作用面试题说说你知道的命令如何查看某次提交修改的内容答案扫码下面的二维码订阅即可获取。 引言 最近在刷面试题,所以需要看大量的 Python 相关的面试题,从大量的题目中总结了很多的知识,同时也对一些题目进行拓展了,但是在看了网上的大部分面试题不...

    trigkit4 评论0 收藏0
  • Python正则表达式简记和re

    摘要:正则表达式是定义搜索模式的字符序列。通常这种模式被字符串搜索算法用于字符串上的查找或查找和替换操作,或者用于输入验证。 正则表达式是定义搜索模式的字符序列。通常这种模式被字符串搜索算法用于字符串上的查找或查找和替换操作,或者用于输入验证。 1. 正则表达式的语法 . 表示任何单个字符 [] 字符集,对单个字符给出取值范围 [^] 非字符集,对单个字符给出排除范围 *前一个字符0次或者...

    hizengzeng 评论0 收藏0
  • Python中的正则表达式

    摘要:正则表达式就是用来描述他称为正则集的代数的表达式,因此采用正则表达式这个术语。文本中正则表达式结束搜索的索引值与和方法的同名参数相同。对象是一个编号的正则表达式通过提供的一系列方法可以对文本进行匹配查找。 一、概述 今天这篇文章带领大家学习一下Python中的正则表达式,当然了,正则表达式本身的内容就足以写好几本书了,我们这里列出的内容,仅仅是Python中常用的和基础的一些内容。 那...

    Juven 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<