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}?