Python基础10,正则表达式

正则表达式

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 )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值