开发者学堂课程【Python入门 2020年版:正则表达式练习】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/639/detail/10449
正则表达式练习
目录:
一、小练习
二、用户名匹配
三、匹配邮箱
四、匹配手机号
五、匹配身份证号
六、匹配 URL 地址
七、匹配 QQ 号
八、匹配微信号
九、匹配车牌号
一、小练习
新建 python,name 为10-练习.py 输入代码:
判断用户输入的内容是否是数字,如果是数字,转换成为数字类型。
num = input(‘请输入一段数字:’)
print
(float(num))
运行,之后在运行框里输入23,则可以显示。若输入 hello,则将会报错。
输入代码:
Import re
# \d+ \.? \d+
# 判断用户输入的内容是否是数字,如果是数字转换类型
num = input(
‘请输入一段数字:’)
if num.isdigit()://
进行判断
print(float(num))
else:
print(
‘不是一个数字’)
这样写会有问题,我们输入整数是没问题的,但是输入小数,比如说3.14,它会认为这不是一个数字。
之后输入代码:
num = input(
‘请输入一段数字:’)
if re.fullmatch(r
’[0-9.]+’, num):
# [0-9. ]+ 45.46.78.//出现一次或多次。
print(
‘是一个数字’)
print
(float(num))
else:
print(
‘不是一个数字’)
运行,在运行框输入4.5.6,将会报错。
将一行代码改成:
if re.fullmatch(r
’\d+(\.?\d+)?’, num):
# 14 .(.45465)
出现一次或多次,运行,输入3.14,将会出现是一个数字;输入3.14.3,将会出现不是一个数字。(只能用 fullmatch不能用 match)
二、用户名匹配:
规则:
#以非数字开头,后面有字母数字下划线:_-组成的长度4到14位的字符串
r '^\D[a-z0-94-Z_I-]{3,13}'
然后运行,演示结果:
In[20]
:re.match(r'^\D[a-z0-9A-Z_\-](3,13)','j3p')In[21]:x=re.match(r'^\D[a-z0-9A-Z_\-](3,13)','j3p')
In[22]
:x
In[23]
:print(x)
None
//没有结果,是空的,需要出现3-13位
In[24]
:x= re.match(r'^\D[a-z0-9A-Z_\-](3,13)','j3pqtr')
In[25]
:x
Out[25]: <re.Match object; span=(0, 6), match='j3pqtr
In[26]:
由数字、大小写字母、下划线_和中横线 组成,长度4到14位,并且不能以数字开头。
# r’^\D[a-z0-9A-Z_\-]{3,13}’, ‘sH_8’
解释:
以非数字开头,后面有 字母数字_-组成的长度4到14位的字符串。
运行之后输入re.match(r’^\D[a-z0-9A-Z_\-]{3,13}’,’j3p’)
匹配不到结果。
X = re.match(r
’^\D[a-z0-9A-Z_\-]{3,13}’,’j3p’)
输出的 x 是没有结果的。
Print(X)输出的结果是 None。出现次数在3
到13次,这里出现2次就不行了
x = re.match(r'^ID[a-z0-9A-Z_l-]{3,13}', 'j3pqtr ' )
这个时候输出 x 就会有东西了。
<re. Match object; span=(o,6), match='j3pqtr'>
三、匹配邮箱
匹配格式是灵活的。
r
’^([A-Za-z0-9_\-\.])+@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$
以[A-Za-z0-9_\-\.]开头,以[A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4}结尾。
可以理解为 fullmatch
反斜线表示标点符号。
邮箱的正则表达式有很多,需要自己看什么样是合法的。
四、匹配手机号
只能匹配一部分手机号。
# r’^((13[0-9])|(14[5|7])|(15[0-3]|[5-9]))|(18[0,5-9]))\d{8}$’
# 130 ~ 139都支持
# 145 ~ 147 也支持
150 151 152 153 ,155~159
185~189也支持。
号段已经很过时了,这是比较老的号段了,只能支持这些老的号段进行匹配。
因为现在开了很多新的号段,东西不能注册。因为正则表达式没有验证,没有把199等新号段加进来,加进来后就可以使用了。如果加进去就会告诉你手机号是不合法的。
号段太多,每个都要加,更新比较困难,所以使用正则表达式验证手机号就少了。现在基本都用短信验证码验证。
不管怎么写,号段开的越来越多,正则表达式接受的也多,越来越复杂,所以现在都用验证码,保密性也高。
$表示以什么结尾,#表示以什么结尾。
支付宝验证码等暴力破解是不可能的。
五、匹配身份证号
不可能开一个新的号段。
r^[1-9]\d{5}(18|19|20|)\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$’
身份证号第一位是1到9的数字,后面紧跟的是数字,包含0到9的数字出现五次
解释:前六位1xxxxx ~ 9xxxxxx(地区)
前面表示地区,省市直辖市。
比如:
42开头湖北省
06襄阳市
第七位开始表示出生年月日
年份:1800~2099
月份:01~09 | 10|11|12
日:01~29
除去10号 20号或者加上 |10|20|30|31 号
这个地方没有办法判断,1999年2月29号会被允许,但是2月没有29号,如果写错了也不会被注意到,所以此时需要注意
最后四位:
都是0到9
比如:
734 X
最后一位是 X 的需要注意。
举例:
420606某省某市 2019年 09月 23日 398 8
身份证倒数第二位表示性别,偶数为女,奇数为男。
六、匹配 URL 地址
代码如下:
r'((ht/f)tps?):\/V/([ \wl-]+(\.[ \wl\-]+)*\/)*[\w\-]+(\.[ \w\-]+)*\/?(\?([ \w\-\.,@?^=
‰&:\/~
七、匹配 QQ 号
代码如下:
r'^[1-9][0-9]{4,10}$'
7
八、匹配微信号
代码如下:
r"^[ a-zA-Z]([-_a-zA-Z0-9]{5,19})+$'
九、匹配车牌号
具体代码如下:
# r'^[京津沪渝冀豫云辽黑湘皖鲁新苏浙帻鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领 A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$’
第一部分:地区
第二部分:字母
第三部分:数字
出现4次
能够匹配一些车牌号。