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


    正则表达式

    正则表达式即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)
     
     
     
     
     
     
    

     

     

     

     

     

     

     

     



  • 相关阅读:
    周末郑州程序员朋友技术交流中的PPT
    WCF并发连接数的问题
    郑州.Net技术人员的招聘信息
    在路上
    Windows8体验(1)安装
    挖掘0day打进不同学校
    记一次绕过宝塔防火墙的BC站渗透
    一次实战中对tp5网站getshell方式的测试
    一次从弱口令到getshell
    一次HW实战
  • 原文地址:https://www.cnblogs.com/zhangruilin/p/5769796.html
Copyright © 2020-2023  润新知