正则表达式

元字符

元字符 说明
. 除换行符外所有字符
* 前面符号匹配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 匹配一个特殊字符边界符,比如空格、&、#等

方法

  1. # 取出所有匹配的字符串 返回list
  2. re.findall(pattern, string)
  3. # 只匹配第一个结果
  4. ret = re.search(pattern, string)
  5. ret.group() # 通过group方法获取结果
  6. # 取出所有匹配的字符串 返回iterator 对象
  7. # iterator中存储的是对象需要group获取结果
  8. re.finditer(pattern, string)
  9. # 只在字符串开始的位置匹配
  10. re.match(pattern, string)
  11. # 分割
  12. re.split(pattern, string, maxsplit=0)
  13. # 替换
  14. re.sub(pattern, repl, string)
  15. re.subn() # 返回元组 0替换后字符串,1 替换次数
  16. # 绑定规则
  17. res = re.compile(pattern)

异常处理

  1. # 基本语法
  2. try:
  3. 被检测的代码块
  4. except 异常类型:
  5. try中一旦检测到异常,执行这个位置的逻辑
  6. else:
  7. try内代码没有异常则执行这个位置的逻辑
  8. finally:
  9. 无论是否有异常都执行
  1. # 主动抛出异常
  2. raise 异常类型('异常信息')

常用异常类型

  1. AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
  2. IOError 输入/输出异常;基本上是无法打开文件
  3. ImportError 无法引入模块或包;基本上是路径问题或名称错误
  4. IndentationError 语法错误(的子类) ;代码没有正确对齐
  5. IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
  6. KeyError 试图访问字典里不存在的键
  7. KeyboardInterrupt Ctrl+C被按下
  8. NameError 使用一个还未被赋予对象的变量
  9. SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
  10. TypeError 传入对象类型与要求的不符合
  11. UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
  12. ValueError 传入一个调用者不期望的值,即使值的类型是正确的

断言

  1. assert 条件

模块导入

  1. import 模块名
  2. import 模块名 as 别名
  3. from 模块名 import 属性/函数/类

模块搜索路径

  1. 先从内存中查找(sys.modules)
  2. 内置模块(built-in)
  3. 路径(sys.path)
  1. # 导入指定路径的模块
  2. import sys
  3. sys.path.append(模块路径)
  4. import 模块名

包就是一个包含有__init__.py文件的文件夹
import包,只是在执行__init__.py文件

  1. import 包名.模块名.属性/函数/类