python正则表达式使用实例 python的正则表达式匹配


python正则表达式使用实例 python的正则表达式匹配

文章插图
前言正则表达式作为一名合格的程序员的必备的基本技术之一,其有用性不言而喻 。但是它为什么会非常难以掌握,甚至想用一用也都感觉难以下手呢?本文将会让你一次就看会如何使用Python正则表达式 。
1. 正则表达式的组成
在介绍如何使用Python的正则表达式时,我们需要先认识一下正则表达式的各种功能,以及其组成形式如何 。
正则表达式可以从非结构化的文本中提取到我们想要的内容,其本质为模式匹配,也是体现出智能化的最初手段,现在已经广泛应用于自动化处理信息的流程之中,从爬虫到人工智能,无处不在,其需求也是相当的大 。
一提及正则表达式的编写,在N多的博客里都提到了一个神奇的网站http://www.txt2re.com/,这个网站我之前也用过,如果你不会正则表达式,又想偷懒自动生成,你只需要在这个网站里复制粘贴一个最复杂的情况,然后把你想匹配的内容通过可视化的点击组合就可以自动生成你想要的正则表达式 。
但是遗憾的是,这个网站目前已经打不开了 。这也正是告诉我们,核心技术掌握在自己手里才是真啊 。现在我们来看看正则表达式该如何编写 。下面是使用进行正则表达式的一般流程,不同的语言其实现方法不完全相同,我们今天主要聚焦与使用python进行正则表达式的三种匹配方式,以获得我们想要的目标片段,对于其他方法,我们以后再进行讲解 。
首先确定你的输入的大致格式
在这个输入的大致格式中定位到你需要的内容,以及你不需要的内容 。
通过正则表达式将其匹配出来
抽取其临时的结果将其保存到我们需要的数据结构中
2. 使用python表示正则表达式流程
如果我们使用python进行一个正则表达式正则时,我们主要经历一下几个步骤:
导入包
根据需求指定正则表达式
编译自定义的表达式
根据其表达式进行匹配
输出结果
1,3,5都是相对容易的部分,而其中最难的部分主要有两步,一个是制定一个符合需求的正则表达式,另一个则是如何进行匹配 。我们最后会简单的介绍一下输出结果 。
3. 编写正则表达式
编写正则表达式是其中的核心,如何编写正确的,符合我们想法的表达式呢?我们这里介绍下面两个部分进行构建:
原封不动的单词
这一部分并不是我们需要的,只是一些留存在我们需要的内容中间的部分 。原封不动的单词就原封不动的抄写上去,不要增加格外的形式 。
待匹配的部分
这一部分使我们想抽取出的内容,将我们想匹配的部分使用正则表达式进行表达分为两个部分,一个部分为我们的匹配的字符,例如:
w 匹配字母数字及下划线W 匹配非字母数字及下划线s 匹配任意空白字符,等价于 [tnrf].S 匹配任意非空字符d 匹配任意数字,等价于 [0-9].D 匹配任意非数字A 匹配字符串开始Z 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串 。z 匹配字符串结束G 匹配最后匹配完成的位置 。b 匹配一个单词边界,也就是指单词和空格间的位置 。例如,‘erb’ 可以匹配"never" 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’ 。B 匹配非单词边界 。‘erB’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’ 。n, t, 等. 匹配一个换行符 。匹配一个制表符 。等1…9 匹配第n个分组的内容 。10 匹配第n个分组的内容,如果它经匹配 。否则指的是八进制字符码的表达式 。另一种,则是匹配的模式,决定我们如何进行匹配:^ 匹配字符串的开头$ 匹配字符串的末尾 。. 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符 。[…] 用来表示一组字符,单独列出:[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 可选标志(?#…) 注释.(?= re) 前向肯定界定符 。如果所含正则表达式,以 … 表示,在当前位置成功匹配时成功,否则失败 。但一旦所含表达式已经尝试,匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边 。(?! re) 前向否定界定符 。与肯定界定符相反;当所含表达式不能在字符串当前位置匹配时成功(?> re) 匹配的独立模式,省去回溯 。两者搭配即可完成我们想要的结果,虽然这里列举了很多,但是我们常用的就那几个,正则表达式的简单划分将正则表达式划分为元字符、反义、量词和懒惰限定词 。我会在后面的部分给出一个实例 。当我们的正则表达式撰写完毕后,我们使用下面的函数获得我们的匹配模板 。


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: