1 re库介绍
re库是python的标准库之一,re 是 regular expression 的缩写,又称为:正则表达式,其优势在于简洁明了,通过字符串表达框架。
2 使用方法
常用操作符 | 说明 |
---|
. | 表示除换行符外的任意单个字符 |
[ ] | 字符集,单个字符取值为[ ]内的任意一个字符 |
[^ ] | 非字符集,单个字符取值一定不为[ ]内的任何字符 |
* | 表示前一个字符在区间 [0, +∞) 内任意整数次扩展 |
+ | 表示前一个字符在区间 [1, +∞) 内任意整数次扩展 |
? | 表示前一个字符0次或者1次扩展 |
{m} | 表示前一个字符m次扩展 |
{m,} | 表示前一个字符在区间 [m, +∞) 内任意整数次扩展 |
{m,n} | 表示前一个字符在区间 [m, n] 内任意整数次扩展 |
^ | 匹配字符串开头 |
$ | 匹配字符串结尾 |
( ) | 分组标记 |
\d | 表示任意一个数字字符,即0~9其中一个 |
\w | 表示任意一个字母或数字或下划线或汉字字符 |
\s | 表示任意的空白符 |
\b | 表示单词的开始或者结束 |
3 常用表达
3.1 由26个字母组成的字符串
r'^[A-Za-z]+$'
3.2 整数形式
r'^-?\d+$'
3.3 正整数形式
r'^[0-9]*[1-9][0-9]*$'
3.4 IP地址
r'(([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5]).){3}([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])'
4 库函数
函数 | 说明 |
---|
re.search( ) | 搜索匹配正则表达式第一个位置,返回match对象 |
re.match( ) | 从字符串开始起位匹配正则表达式,返回match对象 |
re.findall( ) | 搜索字符串,返回全部符合字串 |
re.split( ) | 将一字符串按照正则匹配结果分割,返回列表类型 |
re.finditer( ) | 搜索字符串,返回元素为match对象的迭代类型 |
re.sub( ) | 在字符串中替代所有正则表达式子串,返回字符串 |
4.1 re.search(pattern, string, flags = 0)
- pattern: 模式字符串,由要匹配的正则表达式转换而来
- string: 待匹配字符串
- flags: 可选参数,使用时控制标记,具体如下:
标志 | 说明 |
---|
A 或 ASCII | 对于\w,\b,\d,\s只进行ASCII匹配 |
I 或 IGNORECASE | 执行不区分字母大小写 |
M 或 MULTILINE | 将^和$用于整个字符串的开始和结尾的每一行 |
S 或 DOTALL | 使用 . 字符匹配所有字符,包括换行符 |
X 或 VERBOSE | 忽略字符串中未转义的空格和注释 |
4.2 re.match(pattern, string, flags = 0)
- pattern: 模式字符串,由要匹配的正则表达式转换而来
- string: 待匹配字符串
- flags: 可选参数,使用时控制标记,具体如下:
标志 | 说明 |
---|
A 或 ASCII | 对于\w,\b,\d,\s只进行ASCII匹配 |
I 或 IGNORECASE | 执行不区分字母大小写 |
M 或 MULTILINE | 将^和$用于整个字符串的开始和结尾的每一行 |
S 或 DOTALL | 使用 . 字符匹配所有字符,包括换行符 |
X 或 VERBOSE | 忽略字符串中未转义的空格和注释 |
4.3 re.findall(pattern, string, flags = 0)
- pattern: 模式字符串,由要匹配的正则表达式转换而来
- string: 待匹配字符串
- flags: 可选参数,使用时控制标记,具体如下:
标志 | 说明 |
---|
A 或 ASCII | 对于\w,\b,\d,\s只进行ASCII匹配 |
I 或 IGNORECASE | 执行不区分字母大小写 |
M 或 MULTILINE | 将^和$用于整个字符串的开始和结尾的每一行 |
S 或 DOTALL | 使用 . 字符匹配所有字符,包括换行符 |
X 或 VERBOSE | 忽略字符串中未转义的空格和注释 |
4.4 re.split(pattern, string, maxsplit = 0, flags = 0)
- pattern: 模式字符串,由要匹配的正则表达式转换而来
- string: 待匹配字符串
- maxsplit: 可选参数,最大匹配分割数
- flags: 可选参数,使用时控制标记,具体如下:
标志 | 说明 |
---|
A 或 ASCII | 对于\w,\b,\d,\s只进行ASCII匹配 |
I 或 IGNORECASE | 执行不区分字母大小写 |
M 或 MULTILINE | 将^和$用于整个字符串的开始和结尾的每一行 |
S 或 DOTALL | 使用 . 字符匹配所有字符,包括换行符 |
X 或 VERBOSE | 忽略字符串中未转义的空格和注释 |
4.5 re.finditer(pattern, string, flags = 0)
- pattern: 模式字符串,由要匹配的正则表达式转换而来
- string: 待匹配字符串
- flags: 可选参数,使用时控制标记,具体如下:
标志 | 说明 |
---|
A 或 ASCII | 对于\w,\b,\d,\s只进行ASCII匹配 |
I 或 IGNORECASE | 执行不区分字母大小写 |
M 或 MULTILINE | 将^和$用于整个字符串的开始和结尾的每一行 |
S 或 DOTALL | 使用 . 字符匹配所有字符,包括换行符 |
X 或 VERBOSE | 忽略字符串中未转义的空格和注释 |
4.6 re.sub(pattern, repl, string, count = 0, flags = 0)
- pattern: 模式字符串,由要匹配的正则表达式转换而来
- repl: 表示替换的字符串
- string: 表示被查找替换的原始字符串
- count: 可选参数,表示匹配最大次数
- flags: 可选参数,使用时控制标记,具体如下:
标志 | 说明 |
---|
A 或 ASCII | 对于\w,\b,\d,\s只进行ASCII匹配 |
I 或 IGNORECASE | 执行不区分字母大小写 |
M 或 MULTILINE | 将^和$用于整个字符串的开始和结尾的每一行 |
S 或 DOTALL | 使用 . 字符匹配所有字符,包括换行符 |
X 或 VERBOSE | 忽略字符串中未转义的空格和注释 |
5 贪婪匹配和最小匹配
5.1 贪婪匹配原则
re库自动搜索时默认贪婪匹配,即返回最长的符合字符串。
5.2 最小匹配原则
对正则表达式进行以下修改,则返回最短的符合字符串:
修改前 | 修改后 |
---|
* | * ? |
+ | +? |
? | ?? |
{m,n} | {m,n}? |