day-16正则表达式作业(2022.05.05)
利用正则表达式完成下面的操作:
一、不定项选择题
- 能够完全匹配字符串"(010)-62661617"和字符串"01062661617"的正则表达式包括( ABD) A. r"(?d{3})?-?d{8}" B. r"[0-9()-]+" C. r"[0-9(-)]*d*" D.r"[(]?d*[)-]*d*"
- 能够完全匹配字符串"back"和"back-end"的正则表达式包括( ABCD) A. rw{4}-w{3}|w{4} B. rw{4}|w{4}-w{3} C.rS+-S+|S+ D. rw*-w*|w*
- 能够完全匹配字符串"go go"和"kitty kitty",但不能完全匹配“go kitty”的正则表达式包括(AD) A.r (w+)s+1 B. rw{2,5}s*1 C. r(S+) s+1 D. r(S{2,5})s{1,}1
- 能够在字符串中匹配"aab",而不能匹配"aaab"和"aaaab"的正则表达式包括( BC) A. r"a*?b" B. r"a{,2}b" C. r"aa??b" D. r"aaa??b"
二、编程题
1.用户名匹配
要求: 1.用户名只能包含数字 字母 下划线
2.不能以数字开头
3.⻓度在 6 到 16 位范围内
import re
username =_5345HSDvgh
result = re.fullmatch(r[a-zA-Z_][0-9a-zA-Z_]{5,15},username)
if result:
print(f{
username}是合法的用户名)
else:
print(f{
username}是不合法的用户名)
- 密码匹配
要求: 1.不能包含!@#¥%^&*这些特殊符号
2.必须以字母开头
3.⻓度在 6 到 12 位范围内
password = a1234v-gcf143
result = re.fullmatch(r[a-zA-Z][^!@#¥%^&*]{5,11},password)
if result:
print(f{
password}是合法的密码)
else:
print(f{
password}是不合法的密码)
- ipv4 格式的 ip 地址匹配 提示: IP地址的范围是 0.0.0.0 - 255.255.255.255
ip = 196.183.11.10
result = re.fullmatch(r((d|[1-9]d|1dd|2[0-4]d|25[0-4]).){3}(d|[1-9]d|1dd|2[0-4]d|25[0-4]),ip)
if result:
print(f{
ip}是合法的地址)
else:
print(f{
ip}是不合法的地址)
- 提取用户输入数据中的数值 (数值包括正负数 还包括整数和小数在内) 并求和
例如:“-3.14good87nice19bye” =====> -3.14 + 87 + 19 = 102.86
result = re.findall(r[-+]?d+.?d*,-3.14good87nice19bye) result1 = eval(+.join(result)) print(result1) from functools import reduce result = re.finditer(r[-+]?d+(.d+)?,-3.14good87nice19bye4.) result1 = reduce(lambda i,item:i+float(item.group()), list(result), 0) print(result1)
- 验证输入内容只能是汉字 str1 = -3.14good87nice19bye result1 = re.fullmatch(r[u4e00-u9fa5]+,str1) if result1: print(f{ str1}是汉字) else: print(f{ str1}不完全是汉字)
- 匹配整数或者小数(包括正数和负数) num = -3.0 result = re.fullmatch(r[-+]?(d|[1-9]d+)(.d+)?, num) if result: print(f{ num}合法) else: print(f{ num}不合法)
- 拆分长字符串:将一首诗的中的每一句话分别取出来 poem = ‘窗前明月光,疑是地上霜。举头望明月,低头思故乡。’
result = re.split(r[,。],poem) print(result) result = re.findall(r[u4e00-u9fa5]+,poem) print(result)
