正则表达式
元字符
| 元字符 | 说明 | |
|---|---|---|
. |
除换行符外所有字符 | |
* |
前面符号匹配0~无穷次 | |
+ |
前面符号匹配1~无穷次 | |
? |
0~1次 非贪婪匹配, *、+后面加? |
|
{} |
{n,m} n~m次 {m} m次 {n,} n~无穷次 | |
^ |
开头匹配 | |
$ |
结尾匹配 | |
[] |
字符集,[]中元字符都是普通字符, 除:-、^、\[0-9] 0~9; [a-z] a~z; [A-Z] A~Z;[^\d] 匹配非数字(取反) |
|
() |
分组,只显示分组中匹配的内容(?:) 显示所有匹配的内容(?P<name>) 有命名分组,group(‘name’)取对应组的内容 |
|
| ` | ` | 或 |
\ |
转义符,将无意义字符转化成有意义字符,将元字符转化为普通字符\d 匹配任何十进制数,相对于[0-9]\D 匹配热河非数字字符,相对于[^0-9]\s 匹配任何空白字符,相对于[\t\n\r\f\v]\S 匹配任何非空白字符,相对于[^\t\n\r\f\v]\w 匹配任何字母数字字符,相对于[0-9a-zA-Z]\W 匹配任何非字母数字字符,相对于[^0-9a-zA-Z]\b 匹配一个特殊字符边界符,比如空格、&、#等 |
方法
# 取出所有匹配的字符串 返回listre.findall(pattern, string)# 只匹配第一个结果ret = re.search(pattern, string)ret.group() # 通过group方法获取结果# 取出所有匹配的字符串 返回iterator 对象# iterator中存储的是对象需要group获取结果re.finditer(pattern, string)# 只在字符串开始的位置匹配re.match(pattern, string)# 分割re.split(pattern, string, maxsplit=0)# 替换re.sub(pattern, repl, string)re.subn() # 返回元组 0替换后字符串,1 替换次数# 绑定规则res = re.compile(pattern)
异常处理
# 基本语法try:被检测的代码块except 异常类型:try中一旦检测到异常,执行这个位置的逻辑else:try内代码没有异常则执行这个位置的逻辑finally:无论是否有异常都执行
# 主动抛出异常raise 异常类型('异常信息')
常用异常类型
AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性xIOError 输入/输出异常;基本上是无法打开文件ImportError 无法引入模块或包;基本上是路径问题或名称错误IndentationError 语法错误(的子类) ;代码没有正确对齐IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]KeyError 试图访问字典里不存在的键KeyboardInterrupt Ctrl+C被按下NameError 使用一个还未被赋予对象的变量SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)TypeError 传入对象类型与要求的不符合UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它ValueError 传入一个调用者不期望的值,即使值的类型是正确的
断言
assert 条件
模块导入
import 模块名import 模块名 as 别名from 模块名 import 属性/函数/类
模块搜索路径
- 先从内存中查找(sys.modules)
- 内置模块(built-in)
- 路径(sys.path)
# 导入指定路径的模块import syssys.path.append(模块路径)import 模块名
包
包就是一个包含有__init__.py文件的文件夹
import包,只是在执行__init__.py文件
import 包名.模块名.属性/函数/类
