正则表达式.*?探究

几个常见正则表达式

  1. [0-9] \d 匹配数字
  2. \w 字符
  3. {2} {n} 前面表达式出现n次
    • + 前面表达式出现 >= 1
    • ? 0 or 1
    • * >= 0

.*? 懒惰匹配模式

即匹配最短字符串,最短匹配,主要是由问号实现

import re
print(re.findall(r'(da?)', 'dads dsds sda daada')) #a出现0或1次
print(re.findall(r'(da*?)', 'dads dsds sda daada')) #a不出现
print(re.findall(r'(da+?)', 'dads dsds sda daada')) #a只出现一次
print(re.match(r'(da*?)', 'dads dsds sda daada').group())

输出结果:
[‘da’, ‘d’, ‘d’, ‘d’, ‘da’, ‘da’, ‘da’]
[‘d’, ‘d’, ‘d’, ‘d’, ‘d’, ‘d’, ‘d’]
[‘da’, ‘da’, ‘da’, ‘da’]
d

当?跟在 *+ 后面时,其含义为最小匹配,+本来代表出现次数大于或等于1,
这里则限定为了1;* 此时表示出现0次

如果为了匹配da再加一个字符,则需要使用 .

#查看字符串长度
s = 'dads dsds sda daada'
print(len(s))

#返回了20个空字符串
print(re.findall(r'(.*?)', 'dads dsds sda daada'))

#da匹配后再加一个字符(包括空格)
print(re.findall(r'(da.+?)', 'dads dsds sda daada'))
print(re.findall(r'(da.*?)', 'dads dsds sda daada'))

#贪婪匹配,当遇到地一个d时,匹配没有停止,一直到最后一个d,所以只返回了一个字符串
print(re.findall(r'(d.*d)', 'dads dsds sda daada')) 
#非贪婪匹配,第一次遇到d结束匹配,继续下一次查找
print(re.findall(r'(d.*?d)', 'dd dads dsds sda daada'))
#空格匹配和空字符串不一样,注意
print(re.findall(r'(\s)', 'dd dads dsds sda daada'))
19
['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
['dad', 'da ', 'daa']
['da', 'da', 'da', 'da']
['dads dsds sda daad']
['dd', 'dad', 'dsd', 'da d']
[' ', ' ', ' ', ' ']

注意正则中的空格,空格也是匹配内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值