利用正则表达式完成下面的操作:
from re import fullmatch, findall, sub
1.用户名匹配
要求:
1.用户名只能包含数字 字母 下划线
2.不能以数字开头
3.⻓度在 6 到 16 位范围内
def match_name(name_str):
reg = '[a-zA-Z_][\da-zA-Z_]{5,15}'
return True if fullmatch(reg, name_str) else False
-
密码匹配
要求:
1.不能包含!@#¥%^&*这些特殊符号
2.必须以字母开头
3.⻓度在 6 到 12 位范围内
def match_pswd(password_str):
reg = '[a-zA-Z][^!@#¥%^&*]{5,11}'
return True if fullmatch(reg, password_str) else False
- ipv4 格式的 ip 地址匹配
提示: IP地址的范围是 0.0.0.0 - 255.255.255.255
def match_ipv4(ip_str):
reg = '(25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[1-9]?[0-9]\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])'
return True if fullmatch(reg, ip_str) else False
- 提取用户输入数据中的数值 (数值包括正负数 还包括整数和小数在内) 并求和
例如:“-3.14good87nice19bye” =====> -3.14 + 87 + 19 = 102.86
def reg_sum(data_str):
reg = '-?\d+\.?\d*'
return sum([float(num) for num in findall(reg, data_str)])
- 验证输入内容只能是汉字
def match_chn(data_str):
reg = '[\u4e00-\u9fa5]+'
return True if fullmatch(reg, data_str) else False
- 匹配整数或者小数(包括正数和负数)
def match_num(num_str):
reg = '-?([1-9][0-9]+|\d)(\.\d*)?'
return True if fullmatch(reg, num_str) else False
- 使用正则表达式获取字符串中所有的日期信息 匹配年月日日期 格式:2018-12-6
注意年的范围是1~ 9999, 月的范围是1~ 12, 日的范围是1~ 30或者1~ 31或者1~ 29(不考虑闰年)
def find_date(data_str):
reg = '([1-9][0-9]{,3}-([3578]|[1][02]?)-([12][0-9]|3[01]|[1-9]))'\
'|([1-9][0-9]{,3}-([469]|11)-([12][0-9]|30|[1-9]))'\
'|([1-9][0-9]{,3}-(2)-([12][0-9]|[1-9]))'
return [date for info in findall(reg, data_str) for date in info if '-' in date]
- 替换字符串中的不良内容:将输入的内容中的不良内容全部替换成*(参考王者荣耀聊天要求)
def change_bad(data_str):
reg = '王*者+荣+耀*'
return sub(reg, '*', data_str)