正则表达式

                                                                                 正则表达式--python

一  re 模块,我们可以 import re 模块

     1、例:索引一个元素

               re.search(r'查找对象','字符串')    返回值为对象,如果想获取,可以对他赋一个值。

               m = re.search(r'a','aljgoiimg')

               m.group()          ->  可以返回第一个 a 元素

               m.span()           ->   可以返回 a 元素的索引值

     2、     re.match()    必须从一开始,正则表达式满足里面条件,才能有东西返回,否则为none        

     3、     re.findall()     遍历字符串,找到正则表达式匹配的所有位置,并且以列表的形式返回

     4、     group()      返回匹配到的字符串

     5、     re.compile()   编译正则表达式为模式对象

    

二  元字符

     (1)

     .       匹配所有内容    例: re.search(r'.','https://i.cnblogs.com/EditPosts.aspx?opt=1')

             注意:    .   不匹配换行符(/n)

     d     匹配任意数字    例: re.search(r.'d','https://i.cnblogs.com/EditPosts.aspx?opt=1')

             注意:    d

     s     匹配空白符       例:re.search(r.'s','https://i.cnblogs.com/EditPosts.aspx? opt=1')

             注意:    为空白符

     w    匹配字母或数字或下划线或汉字    注意:没有空格、特殊字符

         边界符             例:re.search(r.'is','This is a list')   匹配中间那个is,边界不止是空格,可以是末尾开头等

     ^     匹配开头符       例:re.search(r.'^https','https://i.cnblogs.com/EditPosts.aspx? opt=1')

     $     匹配结尾符        例:re.search(r.'$1','https://i.cnblogs.com/EditPosts.aspx? opt=1')

     解除元字符本身意义,通过加特殊字符接触

     D S W B 是与小写的相反的作用

    (2)匹配次数

      通过参数后跟{}添加数字,匹配对应的次数     

                  {2}                     例:  re.search(r.'d{2}','https://i.cnblogs.com/EditPosts.aspx?ss234355.gpg')          匹配前2次

                  {2,4}                例:  re.search(r.'d{2,4}','https://i.cnblogs.com/EditPosts.aspx?ss234355.gpg')      匹配两个或4个数字,以范围大的为准

                  {,4}                  例:  re.search(r.'d{,4}','https://i.cnblogs.com/EditPosts.aspx?ss234355.gpg')        等价于{0~4}

                  {4,}                  至少匹配4次

      通过 * 或 + 匹配次数

                   例:  URL = 'gegehttps://i.cnblogs.com/EditPosts.aspx?234355.gpgGJEOGIhttps://i.cnblogs.com/EditPosts.aspx?234355.gpgiein'

                           p  = re.compile(r'http:.+.gpg')                 可先将 ‘会调用多次的字符串’ 通过re模块里的compile来保存下来   

                           ss  = re.search(p,URL)                              直接把p放到第一个参数里,URL字符串放到第二个参数里,然后赋值

                           ss.group()                                               即可返回截取的特定字符串

                  注意:  此时截取的字符串里有两个http地址,并没有达到效果。

                           p   = re.compile(r'http:.+?.gpg')               标红部分代替上面的 p ,里面添加了?,使用非贪婪模式,只截取前面一部分就可以了

                           xx  = re.findall(p,URL)                               通过findall方法,可将URL里面的两个地址都截取出来,并且放到列表里

    (3)子组匹配

      1、 通过在[]里添加符号,进行分组匹配,只匹配一个

                                               例: re.research(r'list[,:.!]','lsiaglist,lignt')      那么它会返回  list,这一条,可对比上面的例子提前定义里面那个”list“,很好用。

      2、通过在[]里添加[0-9],进行匹配,可分组到数字,跟上面一样

      3、通过在[]里添加[字母],进行匹配,可分组到数字,跟上面一样

      4、在[]里,^表示除了            例: re.research(r'list[^/d]','lsiaglist,lignt')      它能有数据返回

                                                     re.research(r'list[^/d]','lsiaglist7,lignt')     它不能有数据返回

      5、在[]里, .表示取自己的本身,没有意义

     

   (4)分组

      1、|  表示  或                       例:re.research(r'ab | c','lsiaglist,ligntfjklagac')        返回 c

                                                     re.research(r'a(b | c)','lsiaglist,ligntfjklagac')      返回 ac

     
      2、                                          re.research(r'ab*','lsiaglist,ligntfjklagac')           返回a,它表示截取abbbb+,其中*针对的是b,代表0次或多次

                                                     re.research(r'ab+','lsiaglist,ligntfjklagac')          无返回值,其中+针对的b,代表1次或多次,例子中无ab组合,所以无法返回

                                                    

     

           

拒绝拖延,不忘初衷
原文地址:https://www.cnblogs.com/renjidong/p/6766306.html