超哥带你玩转正则表达式-(六)

超哥带你玩转正则

目录

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

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

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

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(很少)

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

书接上回,咱们上次讲了前面的几个常用函数,今天继续讲解剩下的函数,开始表演

 

5.re.match函数(很少)

作用:只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None,如果匹配成功,则返回表达式对象,记住返回的是一个对象,不是你对象,亲,使用频率很低。

语法

re.match(pattern,string, flags=0) flags参数可选

函数参数说明:

pattern : 匹配的正则表达式

string : 待匹配的字符串。

flags: 同上一个函数介绍

实例1

 

#!/usr/bin/python      
# -*- coding: UTF-8 -*-       
       
import re      
result = re.match('\d{3,4}', '010 是北京市的区号 ,110不是')    
    
print( 'match匹配后的结果对象为: ', result)  

代码输出:

match匹配后的结果对象为:<re.Match object; span=(0, 3), match='010'>

实例2

# 通过span()方法获取匹配的开始和结束索引  
result = re.match('\d{3,4}', '010 是北京市的区号').span())    
print('span输出:',result)  

代码输出:

span输出:(0, 3)

 

实例3:

 

#!/usr/bin / python  
  
import re  
  
line1 = "My phone num1 is 18601916518"  
#( ^ \d + ) 表示匹配开头是数字的字符串一个或多个  
result= re.match(r '(\d+)', line1)  
  
if result:  
    print("result.group() : ", matchObj.group())  
else :  
    print("No match!!")  
print(‘-------------------------------------‘)  
# (^\d+) 表示匹配开头是数字的字符串一个或多个,(\d+$)表示匹配数字结尾的一个或多个  
line2 = "18601916518 is My phone num2"  
result = re.match(r'(\d+)', line2)  
if result:  
    print("result.group() : ", matchObj.group())  
    print("result.group(1) : ", matchObj.group(1))  
    print("result.group(2) : ", matchObj.group(2))  
    print("result.groups() : ", matchObj.groups())  
else:  
    print("No match!!")

 

以上实例执行结果如下:

No match!!

-------------------------------------

result.group() : 18601916518

result.group(1) : 18601916518

result.groups() : ('18601916518',)

 

注解:line1由于手机号在末尾,没有在开头,所以match匹配失败;line2因为手机号在开头,所以match匹配成功

 

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

re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配,否则返回None。

实例

 

# !/usr/bin/python  
import re  
  
line = "SuperTesting is the No.1"  
  
result1 = re.match(r'(\d+)', line)  
if result1:  
    #group,正则表达式匹配的整个结果  
    print("match --> result1.group() : ", result1.group())  
else:  
    print("No match!!")  
  
result2 = re.search(r'(\d+)', line)  
if result2:  
    print("search --> result2.group() : ", result2.group())  
else:  
    print("No match!!")  

 

以上实例运行结果如下:

No match!! -----match函数需要从头匹配,所以失败

search --> result2.group() : 1 -----search函数不需要必须从头,只要匹配到即返回

 

7.re.finditer(很少)

和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。

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

函数参数说明:

pattern : 匹配的正则表达式

string : 待匹配的字符串。

flags: 同上一个函数介绍

实例

 

# -*- coding: UTF-8 -*-    
     
import re    
     
it = re.finditer(r"\d+","12a32bc43jf3")     
for match in it:     
    print (match.group() ) 

 

输出结果:

12

32

43

3

心里话:是不是很爽,其实findall已经能把所有匹配的结果获取到了,所以根据个人酌情选择。

保持关注,后期更多干货,测试开发面试题已经在路上了

功能测试想转型测试开发的同学可以私信 ,六月VIP精品小班6.27就要开课啦,只做小班授课,线上线下均可,人数20人以下,保证授课质量。

 

因为生娃在家待业一年半的宝妈,如何实现逆袭?王者归来涨薪9k

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值