Python - re 模块
-
compile(pattern , flags=0) : 将 字符串格式的正则表达式 转成 Pattern 对象 (Pattern对象是 Python 语言 中 用来表示 正则表达式的 对象)
- compile 编译正则后返回一个 Pattern 对象, Pattern 对象拥有 下面 所有的 方法, 但 Pattern中的 方法 均没有 pattern 和 flags 参数 。
-
findall(pattern , string, flags=0) : 将 正则表达式 检索到的 内容 提取出来、并返回一个 列表
-
finditer(pattern , string, flags=0) : 将 正则表达式 检索到的 内容 提取出来、并返回一个 迭代器 , 迭代器 中 的 每一个元素 是 Match 对象 。
- Match 对象 常见的操作
- span(group=0) : 获取 正则表达式 匹配的 指定 组 内容 的 起始位置 和 结束位置 ,返回一个元组 、 如果 group = 0 代表 获取 整个正则 匹配的的 信息
- start(group=0) : 获取 正则表达式 匹配的 指定 组 内容 的 起始位置 、 如果 group = 0 代表 获取 整个正则 匹配的的 信息
- end(group=0) : 获取 正则表达式 匹配的 指定 组 内容 的 结束位置 、 如果 group = 0 代表 获取 整个正则 匹配的的 信息
- group(group=0) : 获取 正则表达式 匹配的 字符串 ,如果 group = 0 代表 获取 整个正则 匹配的的 信息
- groups() : 获取 正则表达式 每一个组 匹配的 内容, 返回一个元组
- groupdict() : 获取 正则表达式 中 命名捕获分组 匹配的 内容, 返回一个 字典 , 键是 组的 名字 , 值 是 该组匹配的 字符串
- Match 对象 常见的操作
-
search(pattern , string , flags=0) : 获取 正则表达式 匹配 字符串的 第一个 内容, 返回一个 Match 对象 , 如果 没有找到 匹配的内容, 则返回 None
-
match(pattern, string, flags=0) : 匹配的内容必须是字符串头部信息 ,找到并返回一个 Match对象, 如果 头部信息不匹配正则,则返回 None
-
fullmatch(pattern, string, flags=0) : 相当于 在 正则表达式 上 添加 了 以 … 开头 和 以 … 结尾的 限制 。返回 Match 对象
-
split(pattern, string, maxsplit=0, flags=0) : 根据 正则表达式 匹配的内容 进行 字符串的拆分 、返回 列表
string = "ab234g465gsf" # 按照数字拆分字符串 re.split(r"\d+" , string) # ["ab", "g", "gsf"]
-
sub(pattern, repl, string, count=0, flags=0) : 将 正则表达式 匹配的内容 替换成 repl 对应的 字符串, count 设置替换的次数 , 0 代表全部替换 、 返回 替换后的 字符串
-
subn(pattern, repl, string, count=0, flags=0) : 将 正则表达式 匹配的内容 替换成 repl 对应的 字符串, count 设置替换的次数 , 0 代表全部替换 、返回 替换后的 字符串和 替换的次数 组成的元组。
string = "13312344321" # 将手机号中间 4位隐藏 ret = re.sub(r"(?<=1[3-9]\d)(\d{4})(?=\d{4})", "****", string) # 将手机号 中间4位颠倒顺序 ret = re.sub(r"(?<=1[3-9]\d)(\d{4})(?=\d{4})", lambda x: x.group()[::-1],string)
sub 和 subn 中 repl 代表 要替换的内容, 可以是一个 字符串 , 也可以是一个函数
正则中的 修饰符
-
i 模式
: 正则 在 匹配 数据的 时候 忽略 大小写 -
dotAll (s) 模式
: 在 该 模式 下 ,.
匹配 任意字符 -
m
模式 : 多行、 在正则表达式 使用 限定符的 情况下 、默认匹配整个字符串开始和结尾, 如果使用 了m 模式
, 限定符 就变成了 对 字符串的每一行 进行 限定 。
在 Python中, 可以 通过 re.I , re.S , re.M 获取对应的模式,通过 flags 参数传入 , 如果某个操作需要多个模式,可以 使用
|
位或 运算 处理
string = """
234654dsfsdg
abc34ABD13234
ABC2354GG5
GFfg546fg7
"""# 编写一个正则表达式 、提取字符串中 每一行 以 字母开头的 数据
regex = r".+"
ret = re.findall(regex, string, re.M | re.I)
模块
Python 中 一个 .py 文件 就是一个模块 。
多个 模块 可以使用 包 package 进行 管理 、 包 是一个特殊的文件夹, 下面 必须提供一个
__init__.py
文件
导入
import 导入
- import 包
- import 包.模块
- import 包.模块.函数/类…
导入 的时候,也可以 通过 as 设置别名
from import 导入
- from … import …
支持 相对导入 和 绝对导入 。 相对导入 使用
.
(当前位置) 或者..
(上一级位置) ,...
(上上级位置) 等 方式 导入
相对导入
只能运用于包的内部、不能应用于 顶层模块(程序入口模块) 、 相对 导入 。 相对导入 只能 导入 和 它 具有 相同父级包 的 模块 。
顶层模块
程序执行的 入口模块 被称为 顶层模块 , 顶层模块 中不能使用相对导入 。 顶层模块的 模块名
__name__
为__main__
推荐在编写代码的时候 , 在 顶层模块 中 添加
if __name__ == '__main__':
判断 、可以保证 判断中的代码只有在该模块为顶层模块时才执行。