概述
概念
Regular Expression
一种文本模式,描述在搜索文本时要匹配的一个或多个字符串
典型场景
数据验证、文本扫描、文本提取、文本替换、文本分割
语法
字面值
普通字符
需转义:\ ^ $ . | ? * + () [] {}
元字符
匹配
单字,预定义元字符
. 除\n外的所有字符 \d 数字,等同于[0-9] \D非数字,等同于[^0-9]
\s 空白字符 \t\n\r\f\v \S 非空白字符[^\t\n\r\f\v]
\w 字母数字字符[a-zA-Z0-9_] \W 非字线数字[^a-zA-Z0-9_]
批量备选 | yes|no
量词(字符、元字符,字符集如何重复)
? 0或1次 * 0或多次 + 1或多次
特定: {n,m}范围次数 {n}n次 {n,}至少n次 {,m}最多m次
贪婪与非贪婪
贪婪(默认):尽量匹配最大范围结果
非贪婪
尽量匹配最小的范围结果
方法:量词后追加? 例:?? *? +?
边界匹配
^ 行首 $ 行尾 \b 单词边界 \B 非单词边界 \A 输入开头 \Z 输入结尾
注:或因上下文差异有不同表
Python 正则
模块 import re
RegexObject 正则对象
模式对象,表现编译后的正则表达式(编译为字节码并缓存)
编译 re.compile('模式')
.findall() 1查找所有非重叠匹配项 2返回list
.match(string[,pos[,endpos]]) 1匹配,仅从开始位置 2返回MatchObject
.search(string[,[pos[,endpos]]) 1任意位置搜索 2返回MatchObject
.finditer() 1查找所有匹配项 2返回包括MatchObject元素的迭代器
MatchObject 匹配对象
表现被匹配的模式
.group() 1参数为0或空返回整个匹配 2有参时返回特定分组匹配细节 3参数也可以是分组名称
.groups() 返回包含所有子分组的元组
.start() 返回特定分组的起始索引
.end() 返回特定分组的终止索引
.groupdict() 以字典表形式返回分组名及结果
Group 编组
场景 1从匹配模式中提取信息 2创建子正则以应用量词 3限制备选项范围
4重用正则模式中提取的内容
声明 1(模式) 2(?P<name>模式)
引用 1匹配对象内 m.group('name') 2模式内 (?P=name) 3表现内 \g<name>
应用
字符串操作 1 .split(string, maxsplit=0) 分割字符串
2 .sub(repl, string, count=0) 替换字符串
3 .subn(repl, string, count=0) 替换并返回替换数量
编译标记 1 改变正则的默认行为 2 re.I 忽略大小写 3 re.M 匹配多行
4 re.S 指定"."匹配所有字符,包括\n …
模块级别操作 1 re.purge() 清理正则缓存 2 re.escape() 逃逸字符