超哥带你玩转正则
目录
(一)一句话弄明白你的疑问
(二)正则表达式啥玩意?
(三)正则表达式的语法(第一招)
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