python学习笔记之正则表达式1

时间:2022-12-27 09:58:30

正则表达式

正则表达式即RE,我们可以使用正则表达式来匹配字符串集,其实正则表达式是一个小型的编程语言。它可以方便我们对于文本任务的操作。

对于python来说,re模块就是正则式操作模块。

元字符:元字符是特殊的字符,普通的字符在正则表达式中都可以用来匹配自己,如正则表达式‘zhang’可以匹配字符串‘zhang’,但是元字符有他特殊的含义。元字符有: .   ^   $  *   ?   []  {}()



常用的就是这7个。依次介绍:

1:中括号  [] :作用是指定一个字符类,即用来存放需要匹配的字符串集合,该集合成为一个字符类,例如: [PTU] 含义是:匹配字符P、T或者U,含有一种形式:[a-c] 含义是:匹配字符a、b或者c

特别的,元字符在中括号中就丧失了它的特殊意义,变成了普通字符,也就是可以匹配元字符本身了。例如:[ZD$] 含义是:匹配字符Z、D或者$。


2:^ 是脱字符号,例子:[^1] 匹配除了1以外的任何字符。


3: 反斜杠\:很重要,正则表达式中用的最多。反斜杠\ 加元字符可以将元字符转成普通字符。丧失其元字符的特殊含义。例如正则表达式:‘ \*’含义是匹配字符*。‘\?’含义是匹配字符问号? 



4:反斜杠加上一些普通字符可以表示一些特殊功能。列举:\d   匹配任何十进制数字字符 相当于 [0-9]

              \D   匹配任何非十进制数字字符

              \s   匹配任何空白字符(空格 回车 制表键)

             \w  匹配任何单词字符

             这些都可以加入到字符类(中括号)中。


5: . 点:它匹配了换行符以外的任何字符    例如:正则式‘Z.U’匹配ZAU 或者ZBU等字符串

以上都是匹配字符,



我们还可以一下元字符来匹配字符串:

6: * :匹配前一个字符的0次或者多次


7: + :匹配前一个字符1次或者多次


8: ?:匹配前一个字符0次或者1次


9: 花括号{}   例如{m,n} 表示前一个字符必须要匹配m到n次之间。

当然花括号可以代替前面的6,7,8元字符。不在赘述

 

 

 

 

在python中使用正则表达式

Python中的re模块,就是正则式模块。一般情况下,我们将正则式字符串编译成模式对象,然后对其进行操作。

编译方法如下: p=re.compile(r‘zhangruilin’)   稍后会解释为什么字符串前面带一个r字符。 其中正则正则表达式作为一个字符传入函数,然后函数返回一个模式对象。


现在解释下正则表达式字符串前面为什么会有一个字符r,在正则表达式中,我们都知道反斜杠会让一些普通字符具有特殊含义,例如\d,我们想要匹配反斜杠,就要在反斜杠前面加入一个反斜杠,即\\。


同样,在python,反斜杠同样有特殊含义(即\\ 表示\),例如我们要匹配’\zhangruilin’   则正则式表示为 ‘\\zhangruilin’  进而,在python中   最终要写成’\\\\zhangruilin’ 才可以。大家若是不理解,就直接记住,在匹配字符串时候,正则式字符串前面加上字符r即可。所以要匹配字符串’\zhangruilin’  正则式字符串表示为:‘\\zhangruilin‘这样就更加简单。



10: 匹配函数:将正则表达式字符串编译后,成为模式对象,对于模式对象,我们有很多操作函数。

Findall    match     search     接下来一一介绍。

Findall()函数:遍历字符串,找到匹配成功的所有位置,然后以列表的形式返回

Match()函数:判断正则表达式是否从开始出匹配,若是,返回一个匹配对象,若不是返回none

Search() 遍历字符串找到匹配的第一个位置(因为一个字符串中可以有多个匹配成功的子字符串)

同时对于match ()和search()返回的匹配对象,我们有如下操作:

Group() 返回匹配的字符串(默认是贪婪的,关于正则表达式默认是贪婪匹配的)

Start()  返回匹配的字符串在元字符串中的起始位置

Span()返回匹配的字符串在元字符串中的范围

End()  返回匹配的字符串在元字符串中的结束位置

 

 

 

以上的所有操作如下图:

>>>import re      #导入模块

>>>ZZBDS=re.compile(r'\.zhang*[abc]*')      #编译正则表达式,生成模式对象

>>>str1='.zhan'     #匹配字符串

>>>a=ZZBDS.match(str1)     #使用match函数 :正则式对象 ZZBDS 从头匹配str1,则返回匹配对象

>>>a.span()      #返回匹配范围

(0, 5)

>>>a.start()       #返回匹配开始位置

0

>>>a.end()     #返回匹配结束位置的下一个  注意:真正结束位置是4

5

 

 

>>>str2='zhang'  

>>> b=ZZBDS.match(str2)     #匹配失败,ZZBDS表达式第一个匹配要求为  .        匹配失败

>>>type(b)                             #匹配失败,返回空

<class'NoneType'>

 

>>>str3='.zhanggggaaaa'      

>>>c=ZZBDS.match(str3)

>>>c.span()

(0, 13)

>>>c.start()

0

>>>c.end()

13

 

 

 

>>>str4='.zhanabc'

>>>d=ZZBDS.match(str4)

>>>type(d)

<class'_sre.SRE_Match'>

>>>d.span()

(0, 8)

>>>d.end()

8

>>>d.start()

0

 

 

>>>str5='zzu.zhangggggdddda'

>>>e=ZZBDS.search(str5)    #遍历字符串,找到匹配的第一个位置

>>>e.span() 

(3, 13)

 

 

import re

ZZBDS=re.compile(r'\.zhang*[abc]*')
str1='.zhan'
a=ZZBDS.match(str1)
a.span()
a.start()
a.end()

str2='zhang'
b=ZZBDS.match(str2)
b

str3='.zhanggggaaaa'
c=ZZBDS.match(str3)
c.span()
c.start()
c.end()


str4='.zhanabc'
d=ZZBDS.match(str4)


str5='zzu.zhangggggdddda'
e=ZZBDS.search(str5)

str6='zzu.zhangggggdddd'
f=ZZBDS.search(str6)