正则表达式
正则表达式的定义
- 定义:正则表达式是一个特殊的字符序列,一个字符串是否与我们所设定的这样的字符序列相匹配。
- 作用:快速检索文本,实现一些替换文本的操作
- Python 中的正则表达式模块:re
元字符和普通字符
- 普通字符:
abc
- 元字符:
\d, \D, \f, \n
等,每种元字符都有不同的含义 - 正则表达式就是普通字符和元字符组成的
字符集
- 中括号中的字符是
或
的关系 - 取反使用
^
- 范围:
[a-z], [a-zA-Z]
1 | s = 'abc, acc, adc, aec, afc, ahc' |
概括字符集
\d
代表数字,相当于[0-9]
\D
代表非数字,相当于[^0-9]
\w
代表单词字符,相当于[0-9a-zA-Z_]
\W
代表非单词字符,相当于[^0-9a-zA-Z_]
\s
代表空白字符\S
代表非空白字符.
代表除换行符的所有字符
数量词
[a-z]{3,6}
匹配 3 到 6 次
贪婪和非贪婪
- 贪婪:尽可能多的匹配,一直到不满足条件为止
- 非贪婪:一旦满足条件就停止匹配
- Python 倾向于贪婪模式
1 | # 匹配3-6个字母,贪婪模式下,会匹配尽可能多的字母,直到不满足条件,因此会匹配出['python', 'java', 'php'] |
匹配 0 次,1 次或无限次
*
匹配前面的字符 0 次或 n 次+
匹配前面的字符 1 次或 n 次?
匹配前面的字符 0 次或 1 次,要与非贪婪模式的问号区分
边界匹配符
^
首部,^000
开头三个字符为000
$
尾部,000$
结尾三个字符为000
组
- 一个括号对应一组,
(Python){3}
,把一个组重复 3 次 - 组中的每个字符是且的关系
匹配模式参数
- 忽略字母大小写:
re.I
.
表示匹配任意字符:re.S
1 | s = 'abc, acc, adc, aec, afc, ahc, aFc' |
re.sub 正则替换
1 | a = 'python 111java678php' |
match 与 search 函数
- match 函数:从字符串的首字母开始匹配,如果首字母没有匹配到则返回空
- search 函数:搜索字符串,知道找到第一个符合要求的字符串
- match 和 search 只匹配一个结果,findall 会匹配所有符合条件的字符串
group 分组
- 使用括号进行分组
1 | s = 'life is short, i use python, i love python' |
JSON
理解 JSON
- JSON 是一种轻量级的数据格式
- 字符串是 JSON 的表现形式
- JSON 字符串:符合 JSON 格式的字符串
- JSON 对象:Python 中没有 JSON 对象,JS 中有 JSON 对象
JSON 的特点
- 易于阅读
- 易于解析
- 网络传输效率高
- 跨语言交换数据
反序列化
- Python 中会把 JSON 字符串解析成字典或列表
- Python 中的数据类型对应 JSON 中的数据类型:
1 | import json |
序列化
1 | s1 = json.dumps(a) |
枚举
枚举类型(Python3)
- 枚举也是一个类
- 枚举在 Python3 中才有,Python2 中没有枚举类
1 | from enum import Enum |
枚举的优势
- 不可变
- 值不会重复
1 | from enum import Enum |
枚举的操作
1 | print(VIP.YELLOW) # VIP.YELLOW,枚举类型 |
枚举的转换
1 | class VIP(Enum): |