week4day3正则表达式
一.匹配类符号
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34''' 1.正则表达式 正则表达式可以让一些复杂的字符串问题变得简单的工具。 例子1:判断一个字符串是否是一个合法的手机号(开头是1,第二位是3-9,后面全是数字,共11位) 2.正则语法(通用) (1)re模块 fullmatch(正则表达式,字符串) —— 判断整个字符串是否满足正则表达式描述的规则(完全匹配) python提供正则表达式的方法:提供一个字符串,字符串内容是一个正则表达式,这个字符串的最前面需要加r python的正则表达式:r'正则' js的正则表达式:/正则/ oc的正则表达式:”正则“ (2)正则语法内容: 包括:匹配类符号,控制次数符号,分组和分支,检查类符号 3.匹配类字符 —— 约束字符串中某个位置上的字符是什么样的字符 (1)普通符号(字符):在正则表达式表示字符本身的字符就是普通字符(除了特殊字符以外的都是普通字符) #r'abc' —— 表示一个字符串,有三个字符,分别是a,b和c (2). —— 匹配任意一个字符 #r'.bc' —— 表示一个字符串,有三个字符,第一个字符是任意字符,第二个和第三个分别是b和c (3)d —— 匹配任意一个数字字符 (4)s —— 匹配任意一个空白字符 空白字符:任意可以产生空白效果的符号,例如:空格,t,n (5)D —— 匹配任意一个非数字字符 (6)S —— 匹配任意一个非空白字符 (7)[字符集] —— 匹配字符集中的任意一个字符 (8)[^字符集] —— 匹配不在字符集中的任意一个字符 ''' from re import fullmatch #r'abc' —— 表示一个字符串有三个字符,分别是a,b和c result=fullmatch(r'abc','abc') print(ord('无')) result=fullmatch(r'x[u4e00-u9fa5]b','x的b') print(result)
二.控制次数类的符号
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28''' 控制次数的符号的用法:匹配类符号次数 1. * —— 任意次数(0次或多次) a* —— a出现0次或多次 d* —— d出现0次或多次(任意数字出现0次或多次) [abc]* —— [abc]出现0次或多次 2.+ —— 至少一次或多次 3.? —— 0次或一次 4.{} {n} —— n次 {m,n} —— m到n次 {m,} —— 至少m次 {,n} —— 最多n次 5.贪婪和非贪婪模式 在匹配次数不确定的时候有贪婪和非贪婪两种模式 (1)默认是贪婪模式:*,+,{m,n},{m,},{n,} 贪婪模式:如果多种匹配次数都可以匹配成功,最后取最大的次数进行匹配 (2)非法贪婪模式:*?,+?,{m,n}?,{m,}?,{n,}? ''' # 练习:写一个正则表达式,可以匹配任意一个合法数字 from re import fullmatch # str1=input('请输入一个整数:') # result=fullmatch('[+-]?[1-9]d*',str1) # print(result !=None) result=fullmatch('','.') print(result)
三.分组和分支
1
2
3
4
5
6
7
8
9
10
11
12
13
14''' 1.分组 —— () (1)整体操作:将正则的一部分用()括起来表示一个分组,然后整体控制次数 (2)重复匹配结果:在正则中用()添加分组,然后在正则用M 来重复前面第M个分组的匹配结果 (3)捕获:findall操作下使得只捕获()中的内容 ''' from re import fullmatch,findall print(findall(r'[a-z](d+)[a-z]','de12231qsdeDEE12313')) ''' 2.分支 —— | 正则1|正则2|正则3|... 注意:如果是正则的部分要进行分支选择,需要将分支的地方加括号 '''
四.检查类符号
1
2
3
4
5
6
7
8
9''' 1.检查类符号 —— 检查符号所在的位置是否符号条件(必须在匹配成功的前提下才检测) (1)单词边界 —— b(检查b所在的位置是否是单词边界) 单词边界:凡是可以将两个单词区分开的符号都是单词边界,比如:字符串开头,字符串结尾,空白字符,标点符号等! 注意:检查类符号不影响字符串长度 (2)检查字符串开头 —— ^ (3)检查字符串结尾 —— $ '''
五.转义符号
1
2
3
4
5
6''' 1.转义符号 (1)在正则中本身具备特殊功能或者特殊意义的符号前加'',让他的功能消失,变成普通符号 (2)[]也可以让独立存在的有特殊意义的符号功能消失 '''
六.re模块
1
2
3
4
5
6
7
8
9
10
11''' 1.re中常用的函数及功能 fullmath(正则,字符串) —— 判断整个字符串是否满足正则描述的对象,如果不满足结果是None,满足返回匹配对象 match(正则,字符串) —— 匹配字符串开头 search(正则,字符串) —— 在整个字符串中查找第一个满足正则表达式的子串,如果找不到返回None,否则返回匹配对象 findall(正则,字符串) —— 获取整个字符串中所有满足正则的子串,返回一个列表(注意分组问题) finditer(正则,字符串)—— 获取整个字符串中所有满足正则的字串,返回一个迭代器,迭代器中的元素是匹配元素 sub(正则,字符串1,字符串2) —— 将字符串2中所有满足正则的字串全部替换成字符串1 split(正则,字符串,次数) —— 将字符串中所有满足正则的字串作为切割点对字符串进行切割 '''
利用正则表达式完成下面的操作:
一、不定项选择题
-
能够完全匹配字符串"(010)-62661617"和字符串"01062661617"的正则表达式包括( A.B,D)
A.
r"(?d{3})?-?d{8}"
B.r"[0-9()-]+"
C.r"[0-9(-)]*d*"
D.r"[(]?d*[)-]*d*"
-
能够完全匹配字符串"back"和"back-end"的正则表达式包括( A,B,C,D)
A.r'w{4}-w{3}|w{4}'
B.r'w{4}|w{4}-w{3}'
C.r'S+-S+|S+'
D.r'w*b-bw*|w*'
-
能够完全匹配字符串"go go"和"kitty kitty",但不能完全匹配“go kitty”的正则表达式包括( A,D)
A.r 'b(w+)bs+1b'
B.r'w{2,5}s*1'
C.r'(S+) s+1'
D.r'(S{2,5})s{1,}1'
-
能够在字符串中匹配"aab",而不能匹配"aaab"和"aaaab"的正则表达式包括( B,C)
A.r"a*?b"
B.r"a{,2}b"
C.r"aa??b"
D.r"aaa??b"
二、编程题
1.用户名匹配
要求: 1.用户名只能包含数字 字母 下划线
2.不能以数字开头
3.⻓度在 6 到 16 位范围内
1
2
3
4
5from re import fullmatch str1=input('请输入用户名:') result=fullmatch('[a-zA-Z_][a-zA-Z_d]{5,15}',str1) print(result)
- 密码匹配
要求: 1.不能包含!@#¥%^&*这些特殊符号
2.必须以字母开头
3.⻓度在 6 到 12 位范围内
1
2
3
4
5from re import fullmatch str1=input('请输入密码:') result=fullmatch('[a-zA-Z][^!@#¥%^&*]{5,11}',str1) print(result)
- ipv4 格式的 ip 地址匹配
提示: IP地址的范围是 0.0.0.0 - 255.255.255.255
1
2
3
4
5from re import fullmatch str1=input('请输入IP地址:') result=fullmatch(r'([0-1]?[0-9]?[0-9].|[2][0-4][0-9].|(25)[0-5].){3}([0-1]?[0-9]?[0-9]|[2][0-4][0-9]|(25)[0-5])',str1) print(result)
- 提取用户输入数据中的数值 (数值包括正负数 还包括整数和小数在内) 并求和
1
2例如:“-3.14good87nice19bye” =====> -3.14 + 87 + 19 = 102.86
1
2
3
4
5
6
7from re import findall from functools import reduce str1=input('请输入数据:') result=findall('[+-]?d+.?d*',str1) result=reduce(lambda x,item:x+eval(item),result,0) print(result)
-
验证输入内容只能是汉字
复制代码1
2
3
4
5from re import fullmatch str1=input('请输入内容:') result=fullmatch('[u4e00-u9fa5]*',str1) print(result)
-
匹配整数或者小数(包括正数和负数)
复制代码1
2
3
4
5from re import fullmatch str1=input('请输入数字:') result=fullmatch('[+-]?d+.?d*',str1) print(result)
-
验证输入用户名和QQ号是否有效并给出对应的提示信息
要求:
用户名必须由字母、数字或下划线构成且长度在6~20个字符之间
QQ号是5~12的数字且首位不能为0复制代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25from re import fullmatch,search str1=input('请输入用户名:') result1=fullmatch(r'[a-zA-Z_d]{6,20}',str1) if result1!=None: print('输入合法') else: if not 6<=len(str1)<=20: print('输入长度不对') if search('[^a-zA-Z_d]',str1)!=None: print('字符类型不合法') str2=input('请输入qq号:') result2=fullmatch('[1-9]d{4,11}',str1) if result2!=None: print('输入合法') else: if not 5<=len(str2)<=12: print('输入长度不对') if search(r'[^a-zA-Z_d]',str2)!=None: print('字符类型不合法') if fullmatch(r'[0].*',str2)==None: print('第一位不是0')
-
拆分长字符串:将一首诗的中的每一句话分别取出来
poem = ‘窗前明月光,疑是地上霜。举头望明月,低头思故乡。’
复制代码1
2
3
4
5from re import split str1='床前明月光,疑是地上霜。举头望明月,低头思故乡。' a=split(r',|。',str1) print(a)
最后
以上就是风中草丛最近收集整理的关于week4day3正则表达式week4day3正则表达式的全部内容,更多相关week4day3正则表达式week4day3正则表达式内容请搜索靠谱客的其他文章。
发表评论 取消回复