超哥带你玩转正则表达式-连载(四)

目录

(一) 一句话弄明白你的疑问 

(二) 正则表达式啥玩意? 

(三) 正则表达式的语法(第一招) 

1.元字符 

2. 重复限定符 

3. 分组 

4. 转义 

5. 条件或 

6. 区间 

(四) 练练手 

(五) 正则表达式的函数(第二招) 

1.re.compile函数 

2.re.findall函数(最常用) 

3.re.sub函数(中等) 

4.re.search函数(一般) 

5.re.match函数(很少) 

6.re.match与re.search的区别 

7.re.finditer(很少) 

8.re.split(很少) 

(六) 正则表达式语法速查表 

超哥带你玩转正则表达式-连载(四)

 

书接上回,上次讲完了所有正则表达式的语法(第一招),今天咱们继续讲解第二招,很重要哦,不着急,收藏,转发,点赞,分享再看!

  1. 正则表达式的函数(第二招)

(只讲重点)

 

超哥带你玩转正则表达式-连载(四)

 

 

 

装个比,说实话为什么别人会认为我讲课讲的好,说白了,一句话,我总是想用最简单的语言来让同学们明白最古板晦涩的技术术语,比如学正则吧,这么多正则函数,说实话学最有用的那个就够了,其他的看看就行,了解就足够了,那接下来我带大家学习的第一个函数就是findall,其次sub,再次split,最后search,match finditer,如果让我只选择一个,那肯定是findall,但是他们的前提是最好先用compile方法预编译一下,这样可以提高匹配速度,他们的优先级就是如此,少废话,开搞。

先来开胃菜,学习compile函数,这个方法一般不会单独使用,都是要匹配正则表达式函数使用,具体跟上超哥节奏,搞起来。

1.re.compile函数

作用:用于编译正则表达式,生成一个 Pattern 对象

语法:

re.search(pattern, string, flags=0)

函数参数说明:

  • pattern : 匹配的正则表达式/正则表达式对象(对象通过compile方法获取)
  • string : 待匹配的字符串。
  • flags: 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为

(说实话,下面的参数了解即可,用到的不多,如果用到也可以回来查)

  • re.I 忽略大小写
  • re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
  • re.M 多行模式
  • re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符)
  • re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
  • re.X 为了增加可读性,忽略空格和 # 后面的注释

实例:

   
import re  
  
# 将正则表达式编译成 Pattern 对象   
pattern1 = re.compile(r'\d+')  
#将正则表达式编译成 Pattern 对象,区分大小写
pattern2 = re.compile(r'\w+', re.I )  

上面的代码已经将正则表达式编译为一个正则表达式对象pattern,接下来就可以用改对象调用正则表达式函数了,函数如下,挨个学习。

2.re.findall函数(最常用)

作用:在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表,使用频率最高。

注意: match 和 search 是匹配一次 findall 匹配所有。

语法:

#第一种:
re.findall(pattern,string,flags=0)
#第二种:
pattern对象.findall(string,flags=0)

函数参数说明:

  • pattern : 匹配的正则表达式/正则表达式对象(对象通过compile方法获取)
  • string : 待匹配的字符串。
  • flags:解释同上

实例1

#导入正则表达式模块
import re  

#使用compile函数预编译成正则表达式对象
kk = re.compile(r'\d+')  
#通过表达式对象调用findall方法,方法内只需要传入待匹配字符串
result = kk.findall('one1two2three3four4')  
print(result)  
 

输出结果:

[1,2,3,4]  

实例2

#导入正则表达式模块
import re  
#使用compile函数预编译成正则表达式对象
kk = re.compile(r'\d+')  
#使用re调用findall方法,方法内需要传入正则表达式对象和待匹配的字符串
result = re.findall(kk, "one1two2three3four4")  
print(result)  

输出结果:

[1,2,3,4]  

练习:有如下字符串:

""" 
    <body> 
        <div> 
          <span class="c-text c-text-hot opr-toplist1-label">橙好牛逼</span> 
        </div> 
    </body> 
 
"""  

请通过正则表达式获取:橙好牛逼

答案:

#通过.匹配任意字符,*匹配前面多个字符,通过?非贪婪匹配控制匹配到的内容为最少内容,不重复匹配< ,加()可以只取出括号内匹配的字符,否则就要带上左右的<>
pat = re.compile('>(.*?)<')  
result = pat.findall(str1)  
print(result)  
print(result[0]) 

输出:

['橙好牛逼', '', '百度']

橙好牛逼

心里话:其实学完findall你已经在工作中驰骋沙场了,这个函数的使用频率最高,已经能够解决我们95%的问题,今天咱们就讲到这里,后面还有其他函数更加精彩,保持关注哦。

功能测试想转型测试开发加微信:chenghaokeji666


版权声明:本文为rainshine1190原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。