本章内容
常用正则表达式整理、正则表达式模块整理、Python中re正则模块函数功能整理。
常用正则表达式整理
表达式说明 |
正则表达式 |
中文 |
[\u4e00-\u9fa5]+ |
QQ号码 |
[1-9]\d{5,10} |
邮箱地址 |
\w+(?:[-+.]\w+)*@\w+(?:[-.]\w+)*\.\w+(?:[-.]\w+)* |
IP地址(泛型匹配) |
\d+\.\d+\.\d+\.\d+ |
IP地址(精确匹配) |
(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\d*? |
手机号 |
(?:13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8} |
URL网址 |
https?://[\w]+(?:[./][\w]+)* |
HTML代码中的SRC属性 |
.*[sS][rR][cC] *= *[\'"](.*?)[\'"].* |
HTML代码中的URL网址 |
.*(?:[sS][rR][cC]|[hH][rR][eE][fF]) *= *[\'"](https?://[\w]+(?:[./][\w]+)*)[\'"].* |
身份证15位匹配 |
[1-9]\d{5}\d{2}(?:0[1-9]|(?:10|11|12))(?:[0-2][1-9]|10|20|30|31)\d{2}[0-9Xx] |
身份证18位匹配 |
[1-9]\d{5}(?:18|19|[23]\d)\d{2}(?:0[1-9]|(?:10|11|12))(?:[0-2][1-9]|10|20|30|31)\d{3}[0-9Xx] |
正则表达式模块整理
一般字符
字符 |
描述 |
.(英文的点) |
匹配任意除换行符\n之外的符号 |
\ |
转义字符,使后一个字符改变原来的意思 |
[…] |
字符集,匹配当中范围内的单个字符(使用 - 代表连续的字符ascii码范围,如a-h代表abcdefgh,常用的有0-9、a-z、A-Z), 如果第一个字符是^ ,则字符集取反(例如:[^a-z] 为所有非小写字母字符),匹配结果为 单 字符而不是所有的字符组合 |
非打印字符
字符 |
描述 |
\cx |
匹配由x指明的控制字符,x的值必须为A-Z或a-z之一,否则将c视为原义的 'c’字符(例:\cM匹配Control-M或回车符) |
\f |
相当于\x0c 和\cL ,匹配换页符 |
\n |
相当于\x0a 和\cJ ,匹配换行符 |
\r |
相当于\x0d 和\cM ,匹配回车符 |
\t |
相当于\x09 和\cI ,匹配水平制表符 |
\v |
相当于\x0b 和\cK ,匹配垂直制表符 |
预定义字符集
字符 |
描述 |
\d |
相当于[0-9] ,包括了所有数字字符 |
\D |
相当于[^\d] 或[^0-9] ,包括了所有非数字字符 |
\s |
相当于[ \t\r\n\f\v] ,包括了所有空白字符 |
\S |
相当于[^ \t\r\n\f\v] ,包括了所有非空白字符 |
\w |
相当于[0-9A-Za-z_] ,包括了所有单词字符(数字、大小写字母、下划线) |
\W |
相当于[^0-9A-Za-z_] ,包括了所有非单词字符 |
数量词
字符 |
描述 |
{m} |
匹配前一个字符m次 |
{m,n} |
m和n最多一个可省略;省略m则{,n} 相当于{0,n} 匹配前一个字符0-n次;省略n则{m,} 匹配前一个字符至少m次,最多无限次 |
? |
相当于{0,1} ,匹配前一个字符0-1次
|
* |
相当于{0,} ,匹配前一个字符0-n次
|
+ |
相当于{1,} ,匹配前一个字符至少1次,最多无限次 |
边界匹配字符
字符 |
描述 |
^ |
匹配字符串的开头(多行模式匹配每一行开头,在[^...] 中仅表示 非 的含义) |
$ |
匹配字符串的末尾(多行模式匹配每一行末尾) |
\A |
仅匹配字符串开头 |
\Z |
仅匹配字符串结尾 |
\b |
匹配单词边界(字与空格之间的位置) |
\B |
相当于[^\b] ,匹配非单词边界 |
逻辑字符和分组字符
字符 |
描述 |
| |
相当于or 可多个想组,优先尝试左边表达式,如果左边匹配失败,则匹配右边,否则跳过,如果没有 (…),则范围是整个表达式 |
(…) |
分组表示,从左到右遇 ‘(’ 则编号 +1 (第1组编号为1) ,分组作为整体,后面可接数量词,分组内的表达式 | 会被限制在分组内 |
(?P<name>) |
给定分组除了编号以外的额外别名 |
\<number> |
引用编号为 <number> 的分组匹配到的字符串 |
(?P=name) |
引用别名为 name 的分组匹配到的字符串 |
不作为分组的情况
字符 |
描述 |
(?..) |
不分组版本,用于使用 **’ |
(?#…) |
此分组用来注释,会被忽略 |
(?aiLmsux) |
此分组设置匹配模式,每个字母代表一个匹配模式,仅在表达式字符串首位表示,详情见下方内容 |
(?=…) |
之后的字符串内容需要匹配表达式才能成功匹配,不消耗字符串内容(例:a(?=\d) 代表后面是数字) |
(?!..) |
之后的字符串内容需要不匹配表达式才能成功匹配,不消耗字符串内容(例:a(?!\d) 代表后面不是数字) |
(?<=…) |
之前的字符串内容需要匹配表达式才能成功匹配,不消耗字符串内容(例:a(?<=\d) 代表前面是数字) |
(?<!..) |
之前的字符串内容需要不匹配表达式才能成功匹配,不消耗字符串内容(例:a(?<!\d) 代表前面不是数字) |
(?(id/name) yes-patterm|no-pattern) |
如果编号为id或别名为name的组匹配到字符,则需要匹配yes-pattern,否则需要匹配no-pattern(可以省略) |
部分数量词的贪婪模式与非贪婪模式
前提:整个表达式匹配成功。
区别:贪婪模式将尽可能的多匹配,非贪婪模式将尽可能的少匹配。
贪婪模式量词 |
非贪婪模式量词 |
{m,n} |
{m,n}? |
{m,} |
{m,}? |
? |
?? |
* |
*? |
+ |
+? |
Python中re正则模块函数功能整理
正则匹配模式种类
匹配模式 |
模式全称 |
解释 |
详细解释或备注 |
re.A |
re.ASCII |
只匹配ASCII字符 |
Python3的默认字符串已经是UNICODE 了 |
re.I |
re.IGNORECASE |
忽略大小写 |
表达式如[A-Z] 也会匹配小写字符 |
re.L |
re.LOCALE |
语言依赖 |
只能对byte 样式、8位字节有效,且不能和re.ASCII 一起使用 |
re.M |
re.MULTILINE |
多行模式 |
^ 和$ 仅匹配每行开头与每行结尾 |
re.S |
re.DOTALL |
点. (英文的点) |
匹配全部字符 |
re.U |
re.UNICODE |
Unicode匹配 |
Python3的默认字符串已经是UNICODE 了 |
re.X |
re.VERBOSE |
冗长模式 |
允许分段和添加注释(每行# 后为注释),空白除非字符集或转义,否则忽略 |
正则对象种类
种类 |
描述 |
支持方法 |
拥有属性 |
<class 're.Pattern'> |
正则表达式对象 |
search 、match 、fullmatch 、split 、findall 、finditer 、sub 、subn
|
flags 、groups 、groupindex 、pattern
|
<class 're.Match'> |
匹配对象 |
expand 、group (可以用下标取值)、groups 、groupdict 、start 、end 、span
|
pos 、endpos 、lastindex 、lastgroup 、re 、string
|
<class 'callable_iterator'> |
可迭代对象 |
None |
None |
统一参数种类
种类 |
描述 |
pattern |
正则表达式对象 |
string |
待处理字符串 |
repl |
可以是字符串或callback对象,如果是字符串则将正则匹配到的字符串替换成字符串,否则由只接收匹配对象一个参数处理匹配到的字符串 |
maxsplit |
最大分隔次数 |
count |
最大替换次数 |
flag |
正则匹配标记 |
default |
不参与匹配的组合的默认值 |
__group |
匹配结果的组的序号,可以是一个整数或一个整数列表 |
正则函数功能
-
re.compile(pattern, flags=0)
- 生成一个正则表达式对象
- 返回对象:
<class 're.Pattern'>
-
re.search(pattern, string, flags=0)
- 扫描整个字符串找到匹配的第一个位置并返回匹配对象,没有匹配则返回None
- 返回对象:
<class 're.Match'>
-
re.match(pattern, string, flags=0)
- 从字符串的起始位置匹配(可以不到末尾),在多行模式下只匹配开始位置而不是每行开始,没有匹配则返回None
- 返回对象:
<class 're.Match'>
-
re.fullmatch(pattern, string, flags=0)
- 整个字符串完整的匹配到正则表达式样式则返回匹配对象,没有匹配则返回None
- 返回对象:
<class 're.Match'>
-
re.split(pattern, string, maxsplit=0, flags=0)
- 将正则表达式匹配到的所有对象分隔开来,剩下的字符全部返回到列表最后一个元素
- 返回对象:
<class 'list'>
-
re.findall(pattern, string, flags=0)
- 返回一个不重复的按从左到右顺序返回的匹配列表,如果存在至少一个组,则返回一个组合列表,空匹配不会自动消除
- 返回对象:
<class 'list'>
-
re.finditer(pattern, string, flags=0)
- 返回一个不重复的按从左到右顺序返回的迭代器对象,里面保存了匹配对象,空匹配不会自动消除
- 返回对象:
<class 'callable_iterator'>
-
re.sub(pattern, repl, string, count=0, flags=0)
- 使用
repl
替换字符串最左边正则表达式匹配集合获得的字符串,如果没有匹配结果则不对字符串操作
- 返回对象:
<class 'str'>
- 当
repl
是callback对象时,只接收一个参数且参数类型为<class 're.Match'>
-
re.subn(pattern, repl, string, count=0, flags=0)
- 行为与
sub()
相同,但是返回一个元组 (字符串, 替换次数)
- 返回对象:
<class 'tuple'>
- 当
repl
是 callback 对象时,只接收一个参数且参数类型为<class 're.Match'>
-
re.escape(pattern)
- 转义 pattern 中的特殊字符
- 返回对象:
<class 'str'>
-
re.purge()
正则表达式属性解释
属性 |
描述 |
flags |
正则匹配标记 |
groups |
捕获组合的数量 |
groupindex |
映射由 (?P) 定义的命名符号组合和数字组合的字典 |
pattern |
编译对象的原始样式字符串 |
匹配对象函数功能
-
re.Match.group(__group)
-
re.Match.groups(default)
- 返回一个元组,包含所有匹配的子组,在样式中出现的从1到任意多的组合
-
re.Match.groupdict(default)
-
re.Match.start(__group)
-
re.Match.end(__group)
-
re.Match.span(__group)
- 返回一个匹配区间二元组
(re.Match.start(__group), re.Match.end(__group))
匹配对象属性解释
属性 |
描述 |
pos |
正则引擎开始在字符串搜索一个匹配的索引位置 |
endpos |
正则引擎停止在字符串搜索一个匹配的索引位置 |
lastindex |
捕获组的最后一个匹配的整数索引值 |
lastgroup |
最后一个匹配的命名组名字 |
re |
返回产生这个实例的正则对象 |
string |
待处理字符串 |
结束语
这章理论较多,下一章就是练习了~