1 习题
1.re.compile() 函数返回Regex 对象。
2.使用原始字符串是为了让反斜杠不必转义。
3.search() 方法返回Match 对象。
4.group() 方法返回匹配文本的字符串。
5.分组0 是整个匹配,分组1 包含第一组括号,分组2 包含第二组括号
6.句号和括号可以用反斜杠转义:.、\(和\)。
7.如果正则表达式没有分组,就返回字符串的列表。如果正则表达式有分组,就返回字符串的元组的列表。
8.| 字符表示匹配两个组中的“任何一个”。
9.? 字符可以表示“匹配前面分组0 次或1 次”,或用于表示非贪心配。
10.+匹配1 次或多次。匹配0 次或多次。
11.{3}匹配前面分组的精确3 次实例。{3, 5} 匹配3 至5 次实例。
12.缩写字符分类\d、\w 和\s 分别匹配一个数字、单词或空白字符。
13.缩写字符分类\D、\W 和\S 分别匹配一个字符,它不是数字、单词或空白字符。
14.将re.I 或re.IGNORECASE 作为第二个参数传入re.compile(),让匹配不区分大小写。
15.字符.通常匹配任何字符,换行符除外。如果将re.DOTALL 作为第二个参数传入re.compile(),那么点也会匹配换行符。
16..执行贪心匹配,.?执行非贪心匹配。
17.[a-z0-9]或[0-9a-z]
18.‘X drummers, X pipers, five rings, X hens’
19.re.VERBOSE 参数忽略正则表达式字符串中的空白符和注释
20.re.compile(r’^\d{1,3}(,{3})$’)
21.re.compile(r’[A-Z][a-z]*\sNakamoto’)
22.re.compile(r’([^Alice|Bob|Carol])\s([eat|pets|throws])\s[apples|cats|baseballs].’,re.IGNORECASE)
2 项目实践
1.强口令检测
写一个函数,它使用正则表达式,确保传入的口令字符串是强口令。强口令的定义是:长度不少于8 个字符,同时包含大写和小写字符,至少有一位数字。你可能需要用多个正则表达式来测试该字符串,以保证它的强度。
答:
import re
len_re=re.compile(r'.{8,}')
num_re=re.compile(r'\d')
str_re=re.compile(r'[a-z].*[A-Z]|[A-Z].*[a-z]')
def password_test(password):
if len_re.search(password) and num_re.search(password) and str_re.search(password):
print(password)
print('your password is strong enough!')
else:
print('please reset your password')
password='sbdf2csdc'
password_test(password)
2.写一个函数,它接受一个字符串,做的事情和strip()字符串方法一样。如果只传入了要去除的字符串,没有其他参数,那么就从该字符串首尾去除空白字符。否则,函数第二个参数指定的字符将从该字符串中去除。
答:
import re
def re_strip(aim_str,delete_str=None):
if delete_str==None:
regex=re.compile(r'^\s+.*\s$', re.DOTALL)
else:
regex=re.compile(r''+delete_str+'', re.I)
aim_str=regex.sub("",aim_str)
print("删除后的字符串:"+aim_str)
str1=input("请输入字符串:\n")
str2=input("需要删除的字符是:\n")
re_strip(str1, delete_str=str2)