Python使用正则表达式(Regular Expression)超详细


1、导入re库python

python使用正则表达式要导入re库。正则表达式

import re
在re库中。正则表达式一般被用来检索查找、替换那些符合某个模式(规则)的文本。
ps:另外不少人在学习Python的过程当中,每每由于没有好的教程或者没人指导从而致使本身容易放弃,为此我建了个Python交流.裙 :一久武其而而流一思(数字的谐音)转换下能够找到了,里面有最新Python教程项目可拿,不懂的问题多跟里面的人交流,都会解决哦!编程

2、使用正则表达式步骤网络

一、寻找规律;函数

二、使用正则符号表示规律;学习

三、提取信息,若是每个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。spa

3、正则表达式中常见的基本符号对象

1.点号“.”教程

    一个点号能够代替除了换行符(\n)之外的任何一个字符,包括但不限于英文字母、数字、汉字、英文标点符号和中文标点符号。图片

2.星号“*”

    一个星号能够表示它前面的一个子表达式(普通字符、另外一个或几个正则表达式符号)0次到无限次。

3.问号“?”

    问号表示它前面的子表达式0次或者1次。注意,这里的问号是英文问号。

4.反斜杠“\”

    反斜杠在正则表达式里面不能单独使用,甚至在整个Python里都不能单独使用。反斜杠须要和其余的字符配合使用来把特殊符号变成普通符号,把普通符号变成特殊符号。如:“\n”。

5.数字“\d”

    正则表达式里面使用“\d”来表示一位数字。再次强调一下,“\d”虽然是由反斜杠和字母d构成的,可是要把“\d”当作一个正则表达式符号总体。

6.小括号“()”

小括号能够把括号里面的内容提取出来。

4、常见的正则表达式举例

1.  .*?(匹配全部内容)

例如:'<title>(.*?)</title>'   将网页的标题爬取下来。

二、\w 单词字符[A-Za-z0-9_], "+" 匹配前一个字符1次或无限次 例如:一我的的邮箱是这样的lixiaomei@qq.com,那么咱们如何从一大堆的字符串把它提取出来呢? 

pattern: \w+@\w+\.com


思考:若邮箱为hello123@heuet.edu.com,如何匹配?

pattern:\w+@(\w+\.)?\w+\.com
?表明了匹配0次或者1次括号分组内的匹配内容,"()"则表示被括内容是一个分组,分组序号从pattern字符串起始日后依次排列。由于是匹配0次或1次,那么就意味着括号内的部分是无关紧要的,因此这个pattern就可能匹配以上两种邮箱格式。

扩展: \w+@(\w+\.)*\w+\.com 模式就更厉害了," * " 能够匹配0次或无限次。

5、re库的核心函数

 

一、compile()函数 (无关紧要)

•     函数定义: compile(pattern, flag=0)

•     函数描述:编译正则表达式pattern,而后返回一个正则表达式对象。

为何要对pattern进行编译呢?《Python核心编程》里面是这样解释的:

使用预编译的代码对象比直接使用字符串要快,由于解释器在执行字符串形式的代码前都必须把字符串编译成代码对象。

二、match()函数

•     函数定义: match(pattern, string, flag=0)

•     函数描述:只从字符串的最开始与pattern进行匹配,匹配成功返回匹配对象(只有一个结果),不然返回None。

 

问题来了,为何result1结果有这么多的东西啊?貌似最后一个才是要匹配的对象。这个要怎么提取出来呀?

    别着急,咱们如今获得的是匹配对象,须要用必定的方法提取,后面会在《匹配对象的方法》章节来解决这个问题,继续往下看。
三、search()函数

函数定义: search(pattern, string, flag=0)
函数描述:与match()工做的方式同样,可是search()不是从最开始匹配的,而是从任意位置查找第一次匹配的内容。若是全部的字串都没有匹配成功,返回None,不然返回匹配对象。


四、findall()函数

函数定义: findall(pattern, string [,flags])
函数描述:查找字符串中全部出现的正则表达式模式,并返回一个匹配列表


上面同时列出了match、search、findall三个函数用法。findall与match和search不一样的地方是它会返回一个全部无重复匹配的列表。若是没找到匹配部分,就返回一个空列表。6、匹配对象的方法(提取)

以上re模块函数的返回内容能够分为两种:

    返回匹配对象:就是上面如 <_sre.SRE_Match object; span=(0, 5), match='12345'>这样的对象,可返回匹配对象的函数有match、search、finditer。
    返回一个匹配的列表:返回列表的就是 findall。
所以匹配对象的方法只适用match、search、finditer,而不适用与findall。

经常使用的匹配对象方法有这两个:group、groups、还有几个关于位置的如 start、end、span就在代码里描述了。

一、group方法

方法定义:group(num=0)
方法描述:返回整个的匹配对象,或者特殊编号的字组


再看下面的实例:

 

这里就须要用到咱们以前提到的分组概念。

分组的意义在于:咱们不只仅想获得匹配的整个字符串,咱们还想获得整个字符串里面的特定子字符串。如上例中,整个字符串是“我12345+abcde”,可是想获得 “abcde”,咱们就能够用()括起来。所以,你能够对pattern进行任何的分组,提取你想获得的内容。

二、groups方法

方法定义:groups(default =None)
方法描述:返回一个含有全部匹配子组的元组,匹配失败则返回空元组


7、re模块的属性(flag)

re模块的经常使用属性有如下几个:

re.I: 匹配不分大小写;(经常使用)
re.L: 根据使用的本地语言环境经过\w, \W, \b, \B, \s, \S实现匹配;
re.M: ^和$分别匹配目标字符串中行的起始和结尾,而不是严格匹配整个字符串自己的起始和结尾;
re.S: “.”(点号)一般匹配除了\n(换行符)以外的全部单个字符,该标记表示“.”(点号)可以匹配所有字符;(经常使用)
re.X: 经过反斜线转义,不然全部空格加上#(以及在该行中全部后续文字)都被忽略,除非在一个字符类中或者容许注释而且提升可读性;

 

注意:

若是咱们定义了compile编译,须要先将flag填到compile函数中,不然填到匹配函数中会报错; 若是没有定义compile,则能够直接在匹配函数findall中填写flag。
附录:

正则表达式中语法一览表

另外不少人在学习Python的过程当中,每每由于没有好的教程或者没人指导从而致使本身容易放弃,为此我建了个Python交流.裙 :一久武其而而流一思(数字的谐音)转换下能够找到了,里面有最新Python教程项目可拿,不懂的问题多跟里面的人交流,都会解决哦!

本文的文字及图片来源于网络加上本身的想法,仅供学习、交流使用,不具备任何商业用途,版权归原做者全部,若有问题请及时联系咱们以做处理。

相关文章
相关标签/搜索