1.正则表达式如何写?
序号 | 实例 | 说明 |
1 | . | 匹配任何字符(除换行符以外) |
2 | \d | 等效于[0-9],匹配数字 |
3 | \D | 等效于[^0-9],匹配非数字 |
4 | \s | 等效于[\t\r\n\f],匹配空格字符 |
5 | \S | 等效于[^\t\r\n\f],匹配非空格字符 |
6 | \w | 等效于[A-Za-z0-9],匹配单字字符 |
7 | \W | 等效于[^A-Za-z0-9],匹配非单字字符 |
8 | [ab]cdef | 匹配acdef或bcdef |
9 | abc[de] | 匹配abcd或abce |
10 | [0-9]\[a-z] | 匹配数字0-9\小写字母a-z |
11 | [^0-9]\[^a-z] | 匹配非数字/非小写字母 |
12 | abc? | 匹配ab或abc |
13 | abc* | 匹配ab/abc/abcc……0个以上的c |
14 | abc+ | ab+1个以上c |
15 | \d{3} | 完全匹配3位数 |
16 | \d{3,5} | 匹配3位、4位、5位数 |
17 | \d{3,} | 匹配3位以上的数 |
边界匹配:不消耗匹配字符串中的字符
序号 | 实例 | 说明 |
1 | ^ | 匹配开始位置,多行模式匹配每一行的开始,如^abc,则在开始位置匹配abc |
2 | $ | 匹配结束位置,如.*sh$,在结束位置匹配agfiasfush |
3 | \b | er\b可以匹配never中的er,但是不能匹配verb中的er |
4 | \B | er\B可以匹配verb中的er,但是不能匹配never中的er |
5 | \A | 匹配开始位置,忽略多行模式 |
6 | \Z | 匹配结束位置,忽略多行模式 |
贪婪匹配与惰性匹配:以<div>hello world</div>为例
序号 | 实例 | 说明 |
1 | <.> | 贪婪匹配模式,得到的是<div>hello world</div> |
2 | <.?> | 惰性匹配模式,得到的是<div>或者</div> |
2.常用正则表达式实例
序号 | 实例 | 说明 |
用户名 | ^[a-z0-9_-]{3,16}$ | 只能包含小写字母、数字、下划线、-、至少3位至多16位 |
密码 | ^[a-z0-9_-]{3,18}$ | 只能包含小写字母、数字、下划线、-、至少3位至多18位 |
十六进制值 | ^[0-9A-F]{6}|[0-9A-F]{3}$ | 以#开头,0-F,一共6位或者3位 |
电子邮箱 | ^([0-9a-zA-Z_-.])@([0-9a-z]).([a-z.]{2,6})$ |
3.Python的逻辑运算符
3.1 not
not True:False
3.2 and
True and False : False
and是一种短路操作符,从左到右解析,确认结果即停止
0 and 18:0
15 and 18:18
4 and 3: 3
3.3 or
1. True or True : True
2. True or False : True
3. False or True : True
4. False or False : False
同样or也是一种短路操作符,确认结果即停止
4 or 3 : 4
3 or 0 : 3
0 or 3 : 3
4.lamda表达式
lambda表达式是一种匿名函数,表达式可以作为参数传递给其他函数或直接被调用。
add = lambda x, y: x + y
print(add(5, 3))
5.二叉树的遍历
- 前序遍历:先输出父节点,再遍历左子树,然后遍历右子树:ABDEGCF
- 中序遍历:先遍历左子树,再输出父节点,然后遍历右子树:DBGEACF
- 后续遍历:先遍历左子树,再遍历右子树,最后输出父节点:DGEBFCA
6.Type()和isinstance()的区别
isinstance(object, classinfo)传入两个参数,并判断object是否属于classinfo对应的类
type(object)一般只传入一个参数,输出object对应的类<class'__main__.A'>
type(object) == A 实现与isinstance类似的功能但是区别在于:
1.type只接收一个参数,不但可以判断变量是否属于某个类型,而且可以得到未知的参数变量所属的类型;而isinstance只能判断是否属于某个已知类型,不能直接得到变量未知的所属的类型
2.isinstance可以判断子类实例对象是属于父类的;而type会判断子类实例对象和父类类型不一样