正则表达式作为一名合格的程序员的必备的基本技术之一,其有用性不言而喻。但是它为什么会非常难以掌握,甚至想用一用也都感觉难以下手呢?本文将会让你一次就看会如何使用Python正则表达式。
1.正则表达式的组成
在介绍如何使用Python的正则表达式时,我们需要先认识一下正则表达式的各种功能,以及其组成形式如何。
正则表达式可以从非结构化的文本中提取到我们想要的内容,其本质为模式匹配,也是体现出智能化的最初手段,现在已经广泛应用于自动化处理信息的流程之中,从爬虫到人工智能,无处不在,其需求也是相当的大。
但是遗憾的是,这个网站目前已经打不开了。这也正是告诉我们,核心技术掌握在自己手里才是真啊。现在我们来看看正则表达式该如何编写。下面是使用进行正则表达式的一般流程,不同的语言其实现方法不完全相同,我们今天主要聚焦与使用python进行正则表达式的三种匹配方式,以获得我们想要的目标片段,对于其他方法,我们以后再进行讲解。
首先确定你的输入的大致格式
在这个输入的大致格式中定位到你需要的内容,以及你不需要的内容。
通过正则表达式将其匹配出来
抽取其临时的结果将其保存到我们需要的数据结构中
2.使用python表示正则表达式流程
如果我们使用python进行一个正则表达式正则时,我们主要经历一下几个步骤:
导入包
根据需求指定正则表达式
编译自定义的表达式
根据其表达式进行匹配
输出结果
1,3,5都是相对容易的部分,而其中最难的部分主要有两步,一个是制定一个符合需求的正则表达式,另一个则是如何进行匹配。我们最后会简单的介绍一下输出结果。
3.编写正则表达式
编写正则表达式是其中的核心,如何编写正确的,符合我们想法的表达式呢?我们这里介绍下面两个部分进行构建:
原封不动的单词
这一部分并不是我们需要的,只是一些留存在我们需要的内容中间的部分。原封不动的单词就原封不动的抄写上去,不要增加格外的形式。
待匹配的部分
这一部分使我们想抽取出的内容,将我们想匹配的部分使用正则表达式进行表达分为两个部分,一个部分为我们的匹配的字符,例如:
\w匹配字母数字及下划线\W匹配非字母数字及下划线\s匹配任意空白字符,等价于[\t\n\r\f].\S匹配任意非空字符\d匹配任意数字,等价于[0-9].\D匹配任意非数字\A匹配字符串开始\Z匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。\z匹配字符串结束\G匹配最后匹配完成的位置。\b匹配一个单词边界,也就是指单词和空格间的位置。例如,‘er\b’可以匹配"never"中的‘er’,但不能匹配“verb”中的‘er’。\B匹配非单词边界。‘er\B’能匹配“verb”中的‘er’,但不能匹配“never”中的‘er’。\n,\t,等.匹配一个换行符。匹配一个制表符。等\1…\9匹配第n个分组的内容。\10匹配第n个分组的内容,如果它经匹配。否则指的是八进制字符码的表达式。另一种,则是匹配的模式,决定我们如何进行匹配:^匹配字符串的开头$匹配字符串的末尾。.匹配任意字符,除了换行符,当标记被指定时,则可以匹配包括换行符的任意字符。[…]用来表示一组字符,单独列出:[amk]匹配‘a’,‘m’或’k’[^…]不在[]中的字符:[^abc]匹配除了a,b,c之外的字符。re*匹配0个或多个的表达式。re+匹配1个或多个的表达式。re?匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式re{n}精确匹配n个前面表达式。例如,o{2}不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。re{n,}匹配n个前面表达式。例如,o{2,}不能匹配"Bob"中的"o",但能匹配"foooood"中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。re{n,m}匹配n到m次由前面的正则表达式定义的片段,贪婪方式a|b匹配a或b(re)对正则表达式分组并记住匹配的文本(?imx)正则表达式包含三种可选标志:i,m,或x。只影响括号中的区域。(?-imx)正则表达式关闭i,m,或x可选标志。只影响括号中的区域。(?:re)类似(…),但是不表示一个组(?imx:re)在括号中使用i,m,或x可选标志(?-imx:re)在括号中不使用i,m,或x可选标志(?用于匹配至少一个数字m=('one12twothree34four')从'e'的位置开始匹配,没有匹配printmNonem=('one12twothree34four',3,10)返回一个Match对象__(0)可省略03(0)可省略0(3,5)6.举一个简单的例子
一个更好的,更直观易懂的方法是如下这个例子,相比较刚才使用数字索引,它将每一个匹配内容语义化,使得代码更加容易理解。contactInfo='(Nucleus(span23)(rel2parspan)'pattern=(r'(?Pnuclearity\w+)\(span(?Pstart\w+)(?P\w+)\)\(rel2par(?Prelation\w+)\)')match=(contactInfo)print(())Nucleusprint(("start"))3print(("relation"))最小匹配p2=(r'[(](.*)[)]',)#贪婪匹配print((p1,string))print((p2,string))输出:
[‘love’]
[‘love)fufu’]
匹配中括号中的内容
importrestring='shain[胖妮shain和傻夫夫fufu]fufu)'p=r'[[][\W\w]+[]]'print((p,string))
输出:
[’[胖妮shain和傻夫夫fufu]’]
匹配大括号中的内容
importrestring="shain,fsf{傻夫夫,grr},胖妮{fsf,1201}"p=(r'({.*?})',string)print(p)输出:
[’{傻夫夫,grr}’,‘{fsf,1201}’]
免责声明:本文章如果文章侵权,请联系我们处理,本站仅提供信息存储空间服务如因作品内容、版权和其他问题请于本站联系