使用正则匹配
- 使用正则表达式匹配出0~100的数字
首先我们需要明白0~100数字出现的情况:
可能会出现0 、一位数字、两位数字、还有100
所以先写一个这样的规则:
import re
res=re.match(r'[1-9]\d?$|0$|100$','100')
print(res.group())
我们这样分析:
首先抛去0,我们出现的第一位可能是1-9的任意数字所以匹配规则[1-9],1-9出现的次数呢?我们想一想,当出现两位数的时候,第一位的1-9是不是就只能出现一次(此时没考虑0),所以接下来考虑第二位:
第二位的话可能是11、12、34、60这类的数字,随意包含0,所以匹配的规则是\d,因为输入的数字是一位时,第二位就不出现,所以出现次数为0次或者一次,所以为?符号,接着匹配出两个特殊情况,0和100 用|来加进来,所以执行:
import re
res=re.match(r'[1-9]\d?$|0$|100$','100')
res1=re.match(r'[1-9]\d?$|0$|100$','1')
res2=re.match(r'[1-9]\d?$|0$|100$','15')
res3=re.match(r'[1-9]\d?$|0$|100$','0')
res4=re.match(r'[1-9]\d?$|0$|100$','80')
print(res.group())
print(res1.group())
print(res2.group())
print(res3.group())
因为match方法返回匹配对象(Match Object),所以就是通过group的方法来获取匹配的内容。
进行优化
将上面的匹配规则进行优化,将0考虑进去,也就是意味着第一个可能会出现0,所以将规则优化成:
import re
res4=re.match(r'[1-9]?\d?$|100$','0')
print(res4)
因为第一个可能出现0,所以将[1-9]加上?,出现0次或者一次,所以当0出现时,[1-9]就是出现0次,所以直接从后面的\d?开始匹配
这个是看那个黑马的视频的正则,讲的挺好的