正则表达式
re模块
1,findall方法
找出所有符合规则的字符串,匹配不到返回为空列表
str1 = '人生若只如初见,何事秋风悲画扇'
result = re.findall('只如初见',str1) # 精准匹配
print(result)
match
只能匹配到一个,从字符串的起始位置开始匹配,没有匹配到返回None
str2 = 'python123'
result = re.match('python',str2)
print(result)
group 提取到匹配的内容
a = result.group()
print(a)
span 提取到匹配字符串的下标
b = result.span()
print(b)
search
只能匹配到一个符合条件的字符串,找到了就返回
result = re.search('123',str2)
print(result)
match和search的区别:
match从字符串的开始位置匹配,如果字符串一开始就不符合规则,则匹配失败,返回None
search匹配整个字符串,如果一直找不到,返回None
都只返回一个符合条件的
findall会找到所有符合规则的字符串
2,元字符
.代表任意一个字符
str1 = '高堂明镜悲白发,朝如青丝暮成雪'
result = re.findall('高堂明镜...',str1)
print(result)
[] 字符组 匹配[]中列举的字符组
result = re.findall('[8]',str1) # [0-9]
print(result)
str1 = 'ab ac ad'
result = re.findall('a[bc]',str1) # ab ac
print(result)
整个中括号只代表一个字符
锚点元字符 ^字符串首 $字符串尾
str1 = '高堂明镜悲白发,朝如青丝暮成雪'
re.findall('^高堂明镜',str1)
print(result)
re.findall('暮成雪$',str1)
print(result)
\b 单词边界
str2 = 'hello sayhello'
result = re.findall('\bhello',str2) #3个hello
#(r'\bhello',str2) r反转义,2个hello
print(result)
{}控制次数
控制的是前一个字符出现的次数,可以直接写次数,数字代表数量
str3 = 'abbbbc'
result = re.findall('ab{2}c',str3)
result = re.findall('ab{2,6}c',str3) #可以填区间{2,6}左闭右闭
result = re.findall('ab{,6}c',str3) # 起始位置不写,从0开始
result = re.findall('ab{2,}c',str3) # 终止位置不写,可到正无穷
print(result)
\d 匹配数字
str4 = 'abc123'
result = re.findall(r'\d{3}',str4)
print(result)
\D 匹配非数字
result = re.findall(r'\D{3}',str4)
print(result)
\s匹配空格
str5 = {1 3 5}
result = re.findall(r'\s',str4)
\S匹配非空格
str5 = {1 3 5}
result = re.findall(r'\S',str4)
\w 匹配单词字符和数字
str5 = {123hello@#}
result = re.findall(r'\w',str4)
\W 匹配非单词字符和数字
str5 = {123hello@#}
result = re.findall(r'\W',str4)
*匹配前面的字符出现0次或无限次,即可有可无
+匹配前一个字符出现1次或者无限次,即至少有一次
?匹配一个字符出现0次或者1次
str3 = 'abbbbc'
result = re.findall('ab{2}c',str3)
|选择元字符
str7 = 'a+bhelloa-bhello'
result = re.findall(r'a\+b|a-b',str7) # \+表示转义字符
()将括号中字符作为一个分组,只提取括号当中的内容
3,贪婪模式:尽可能多的去匹配
str3 = 'abbbbbbbbb'
result = re.findall('ab*',str3)
print(result)
非贪婪模式:刚达到标准就可以
str3 = 'abbbbbbbbb'
result = re.findall('ab*?',str3)
print(result)
123455@qq.com
str1 = '123455@qq.com'
result = re.findall(r'^\d{4,12}@qq.com$',str1)
print(result )