re正则表达式
今天介绍下,re正则表达式,主要功能是在字符串中提取想要的字符串,从以下几个方面详细介绍。
以下所用字符串统一为一个文件夹路径:
str=r'D:\python\jupyter - notebook\image_vision\Mask_R- master\hand\1.jpg'
1、匹配
1.1 re.match(pattern,string,flags) 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match() 就返回 none。
其中pattern为匹配样式,string为匹配的字符串,flags为 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等
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 为了增加可读性,忽略空格和
基于上面字符串,re.match匹配‘D'字符串由于在字符串头部,可以匹配到,'R'就匹配不到
print(re.match('D',str))#<re.Match object; span=(0, 1), match='D'>
print(re.match('R',str))#None
1.2、re.search(pattern,string,flags) 扫描整个字符串并返回第一个成功的匹配,和re.match区别是全字符串匹配,不限于头部
print(re.search('D',str))#<re.Match object; span=(0, 1), match='D'>
print(re.search('R',str))#<re.Match object; span=(52, 53), match='R'>
1.3 re.findall(pattern,string,flags)返回形式为数组,输出字符串中所有要查找的,然后组成一个数组。和re.search和re.match区别在于可以匹配多个。可以使用()将样式括起来,匹配到的就是括号里的内容
print(re.findall('t',str))#['t', 't', 't', 't', 't']
print(re.findall(r'(.*?)\\',str))#['D:', 'python', 'jupyter - notebook', 'image_vision', 'Mask_R- master', 'hand']
2 检索和替换
2.1 re.sub(pattern, repl, string, count=0, flags=0)将字符串中不想要的字符替换掉,pattern是样式,当要替换一个样式的时候直接在引号“ 里写就可以了,当有多个的时候可用[]框起来
print(re.sub('[-_]','',str))#D:\python\jupyter notebook\imagevision\MaskR master\hand\1.jpg
2.2 re.compile 函数,编译样式
pattern = re.compile(r'\d+')
print(pattern.search(str))#<re.Match object; span=(62, 63), match='1'>
2.3 re.finditer(pattern, string, flags=0)在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回,使用group()可逐个输出
t = re.finditer(r"t",str)
for match in it: