正则表达式作业 | 学习笔记

简介: 快速学习 正则表达式作业

开发者学堂课程【Python入门 2020年版正则表达式作业】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/639/detail/10452


正则表达式作业


内容介绍

一、  题目一

二、  题目二

三、  题目三

四、  题目四

五、  题目五


.题目一

1.要求

用户名匹配

1)用户名只能包含数字字母下划线

2)不能以数字开头

3)长度在616位范围内

2.分析

只包含数字 字母 下划线 但是不能以数字开头 那就代表的是 开头的符号是 字母或者下划线确定了首位之后 剩余的 515位就是数字字母 下划线其中的内容

^以指定内容开头

$以指定内容结尾

3.代码

import re

#用户名匹配

#1.用户名只能包含数字、字母和下划线

#2.不能以数字开头

#3长度在616位范围

username =input('请输入用户名:')//加入模块

x=re.match(r'^[a-zA-Z_][a-zA-Z0-9_]{5,15}$',username)//表示匹配到的结果。

加入开始符^和结尾符$可以完全匹配。也可以用 for match 进行完全匹配。

不能使用\D\D 表示非数字但会使符号匹配,不能使用\W,因为其包括中文,所以使用[a-zA-Z_]来表示不以数字开头。

数字字母下划线表示为[a-zA-Z0-9_]616位出现的情况是开头出现一次,后面出现5-15次,所以616位表示为{5,15}

if x is None://如果 x 为空

print('输入的用户名不符合规范')

else:

print(x)//输出 x


.题目二

1.要求

密码匹配

1)不能包含!@#%^&*这些特殊符号

2)必须以字母开头

3)长度在612位范围内

2.分析

必须以字母开头 表示首位必须是字母

剩余的511位 中不包含指定的特殊字符[^abc]表示取反 不包含 abc 的含义

3.代码

#密码匹配

#1.不能包含!@%^&*字符2.必须以字母开头3.长度在612

password = input('请输入密码:')

y=re.fuLLmatch(r'[a-zA-Z][^!@#$%^&*]{5,11} ', password)// [a-zA-Z]为以字母开头,[^!@#$%^&*]为不能包含!@%^&*字符,612位出现的情况是开头出现一次,后面出现5-11次,所以612位表示为{5,11}

if y is None://如果y为空

print('密码不符合规范')

else:

print(y)//输出 y


.题目三

1.要求

已知有文件 test.txt 里面的内容如下:

1000phone hello python

mobiletrain 大数据

1000phone java

mobiletrain html5

mobiletrain 云计算

查找文件中以1000phone 开头的语句,并保存到列表中

2.分析

读取文件中的内容 因为文件中的数据是一行一行的 所以每行读取更方便

每一行都要检验一下 是否是以1000phone 开头的 是的话将其保存在列表中

3.代码

1)方法一

z=[ ]

try:

with open('demo.txt', 'r', encoding='utf8') as file:

while True:

content = file.readline().strip('\n'//去掉两行之间的空行

if not content://如果是空字符串

break

if re.match(r'^1000phone', content)://如果以1000phone 开头则打印出来

z.append(content)

except FileNotfoundError:

print('文件打开失败')

print(z)

方法二

Z=[ ]

try:

with open('demo.txt', 'r', encoding='utf8') as file:

content=file.read()//读出所有的内容z=re.findall(r'1000phone.*', content)//1000phone 为开头,当没有.*符号时只能读取1000phone 这几位。符号.表示包含除了换行以外的任意字符,有换行以外就不再继续。

except FileNotFoundError:

print('文件打开失败')

print(z)


. 题目四

1.要求

ipv4格式的 ip 地址匹配

提示:IP 地址的范围是0.0.0.0-255.255.255.255

2.分析

正则表达式 检验的是字符串 字符串中没有二百五十五这一说法只有二五五的说法 所以只能一位一位的检验

ip 地址的四个部分的正则要求是一样的 所以分析出来一部分 另外三个部分 就是 一样的正则格式了所以分析 其中一部分即可

每部分都是有可能由1 23位组成

1 0-9的组成

2[1-9][0-9]组成

3位  以1开头的 后面两位都可以从09 1[0-9][0-9]

2开头的 中间为0-4的后一位都可以是0-9

但是中间位为5   后一位只是0-5

然后根据分析组合在一起即可

3.代码

#ip 地址检测0.0.0.0~255.255.255.255

num=input('请输入一个数字:')

# 0~9  10~99 160~ 199  200~209  210~219 220~229 230~239  240~249  256~255

# \d: 一位数[1-9]\d:两位数  1\d{2}:1xx  2:00~255

X=re.fullmatch(r'((\d|[1-9]\d|1\d{2}|2([0-4]\d|5[0-5]))\.){3}(\d [1-9]\d|1\d{2}|2([0-4]\d|5[0-5]))',num//\d 表示一位数  [1-9] \d 表示第一位不为0的两位数1\d{2}表示1xx 1后接任意两个数字的三位数

print(x)

注意:

正则表达式是一个数字加.所以使用 r'\d|[1-9]\d|1\d{2}|2[0-5]{2}时会匹配不到因为没有把它分成一个整体,要进行分组才能运行成功


. 题目五

1.要求

提取用户输入数据中的数值(数值包括正负数还包括整数和小数在内)并求和

例如:"-3.14good87nice19bye"  =====> -3.14+87+19=102.86

2.分析

提取用户输入数据中的数值(数值包括正负数还包括整数和小数在内)并求和

整数:

1位数 0-9

2位数以上[1-9]+[0-9]

小数:

整数为有1 [0-9].[0-9]*

整数位有2位及以上 [1-9][0-9].[0-9]*

表示负数 可有可无

3.代码

#非捕获分组

x=re.finditer(r'-?(0|[19]\d*)(\.\d+)?'’90good87ni0ce19bye') //(r'-?代表有负数负数出现1次到0次,(0|[1-9]\d*)数字01-9出现多次,\.\d+出现多次并进行分组

for i in x:

print(i)

print(i.group())

相关文章
java202303java学习笔记第二十七天-正则表达式之3
java202303java学习笔记第二十七天-正则表达式之3
71 0
java202303java学习笔记第二十八天-正则表达式基本练习2
java202303java学习笔记第二十八天-正则表达式基本练习2
116 0
java202303java学习笔记第二十八天-正则表达式基本练习1
java202303java学习笔记第二十八天-正则表达式基本练习1
146 0
java202303java学习笔记第二十八天-正则表达式基本练习3 原
java202303java学习笔记第二十八天-正则表达式基本练习3 原
78 0
java202303java学习笔记第二十七天-正则表达式基本练习1
java202303java学习笔记第二十七天-正则表达式基本练习1
110 0
java202303java学习笔记第二十七天-正则表达式之2
java202303java学习笔记第二十七天-正则表达式之2
149 0
java202303java学习笔记第二十七天-正则表达式之1
java202303java学习笔记第二十七天-正则表达式之1
171 0
java202303java学习笔记第二十七天-正则表达式之4
java202303java学习笔记第二十七天-正则表达式之4
79 0
java202303java学习笔记第二十七天-正则表达式之3
java202303java学习笔记第二十七天-正则表达式之3
71 0
|
开发者 Python
正则表达式4|学习笔记
快速学习正则表达式4
正则表达式4|学习笔记