day16练习题 - 正则表达式的相关(ip地址正则、日期正则、正则提取数字、正则匹配)

it2023-09-04  87

利用正则表达式完成下面的操作:

1.用户名匹配

要求: 1.用户名只能包含数字 字母 下划线 2.不能以数字开头 3.⻓度在 6 到 16 位范围内

from re import fullmatch, I str1 = input('请输入用户名(3-6)位:') resutle = fullmatch(r'[A-Za-z_][\dA-Za-z_]{2,15}', str1) if result: print('用户名"{str1}"合法!') else: print('用户名"{str1}"不合法!') # 用(?i)来忽略大小写 resutle = re.fullmatch(r'(?i)[a-z_][\da-z_]{2,15}', str1) 密码匹配

要求: 1.不能包含!@#¥%^&*这些特殊符号和中文 2.必须以字母开头 3.⻓度在 6 到 12 位范围内

from re import fullmatch, I str1 = input('请输入密码(6-12):') result = fullmatch(r'[A-Za-z][^!@#¥%^&*\u4e00-\u9fa5]{5,11}', str1) if result: print(f'密码"{str1}"合法!') else: print('密码"{str1}"不合法!') # 用(?i)来忽略大小写 result = fullmatch(r'(?i)[a-z][^!@#¥%^&*\u4e00-\u9fa5]{5,11}', str1) ipv4 格式的 ip 地址匹配

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

import re str1 = input('请输入ip地址:') result = re.fullmatch(r'(([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])\.){3}([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])', str1) if result: print(f'ip地址"{str1}"合法!') else: print('ip地址"{str1}"不合法!') 提取用户输入数据中的数值 (数值包括正负数 还包括整数和小数在内) 并求和

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

import re from functools import reduce str1 = input('请输入字符串:') nums = re.findall(r'[+-]?\d+.\d+|[+-]?\d+', str1) # 方法一 sum1 = sum([float(x) for x in nums]) # 方法二 sum1 = reduce(lambda x, y: x+float(y), nums, 0) str1 = re.sub('[^0-9-.]+', '+', str(nums)) print(str1[1:-1], '=', sum1) # -3.14+87+19 = 102.86 验证输入内容只能是汉字 import re str1 = input('请输入(q返回):') result = re.fullmatch(r'[\u4e00-\u9fa5]+', str1) if not result: print('输入内容不全是汉字') else: print('输入内容全是汉字') 匹配整数或者小数(包括正数和负数) import re str1 = input('请输入数据:') print(re.fullmatch(r'[+-]?(\d+|\d+\.\d+)', str1))

使用正则表达式获取字符串中所有的日期信息 匹配年月日日期 格式:2018-12-6

注意年的范围是1~9999, 月的范围是1~12, 日的范围是130或者131或者1~29(不考虑闰年)

import re """ 年:([1-9]\d{0,3}) 月(1469)日:((0?[1469]|11)-(0?[1-9]|[1-2]\d|30))| 月(13578)日:((0?[13578]|10|12)-(0?[1-9]|[1-2]\d|30|31))| 月(2)日:(0?2-(0?[1-9]|[1-2]\d)) """ re_str = '([1-9]\d{0,3})-(((0?[1469]|11)-(0?[1-9]|[1-2]\d|30))|((0?[13578]|1[02])-(0?[1-9]|[1-2]\d|3[01]))|(0?2-(0?[1-9]|[1-2]\d)))' result = re.fullmatch(re_str, '1-01-01') print(result) 替换字符串中的不良内容:将输入的内容中的不良内容全部替换成*(参考王者荣耀聊天要求) import re str1 = input('请输入数据:') # [操草曹艹屌马妈爸]|fuck|shit|bitch|sb|[傻鲨沙煞]|[比屄逼叉缺吊屌] from re import sub, S print(re.sub(r'(?s)[操草曹艹屌马妈爸死]|强.*奸|fuck|shit|bitch|sb|[傻鲨沙煞]|[比屄逼叉缺吊屌]', '*',str1)) # [********]|*|*|*|*|[****][*******]
最新回复(0)