基本语法

元字符

代码

说明

举例

.

匹配除换行符外任意一个字符


[abc]

字符集合,只能表示一个字符位置。匹配所包含的任意一个字符


[^abc]

字符集合,只能表示一个字符位置。匹配除去集合内字符的任意一个字符


[a-z]

字符范围,一个集合,表示一个字符位置匹配所包含的任意一个字符


[^a-z]

字符范围,一个集合,表示一个字符位置匹配除去集合内字符的任意一个字符


\b

匹配单词的边界


\B

不匹配单词的边界


\d

等同[0-9] 匹配一位数字


\D

等同[^0-9] 匹配一位非数字


\s

匹配1位空白字符,包括换行符、制表符、空格等同[\f\r\n\t\v]


\S

匹配1位非空白字符


\w

等同[a-zA-Z0-9_] 包含中文


\W

匹配\w之外的字符


转义

  • 凡是在正则表达式中有特殊意义的符号,转义时使用\

重复

代码

说明

举例

*

前面的正则表达式重复0次或多次


+

前面的正则表达式重复至少一次


前面的正则表达式重复0次或1次


{n}

重复n次


{n,}

重复n次以上


{n,m}

重复n到m次


分组(捕获)断言

代码

说明

举例




x

y

匹配x或y




(pattern)

分组(捕获)后会自动分配组号从1开始可以改变优先级 \数字 匹配对应的分组(指的是前一个匹配上的分组的内容)





(?:pattern)

只改变优先级不分组





(?<name>exp)(?nameexp)

分组捕获 给组命名Python句法为(?P<name>exp)





(?=exp)

零宽度正预测先行断言断言exp一定在匹配的右边出现





(?<=exp)

零宽度正回顾后发断言断言exp一定出现在匹配的左边出现





(?!exp)

零宽度负预测先行断言断言exp一定不会出现在右侧





(?<!exp)

零宽度负回顾后发断言断言exp一定不会出现在左侧





(?#comment)

注释





断言不会占用分组号

贪婪与非贪婪

  • 默认贪婪模式,尽可能多的匹配字符串

代码

说明

举例

*?

匹配任意次,尽可能少重复


+?

匹配至少一次,尽可能少重复


??

匹配0或1次,尽可能少重复


{n}?

匹配至少n次,尽可能少重复


{n,m}?

匹配至少n次,至多m次,尽可能少重复


引擎选项

代码

说明

举例

IgnoreCase

匹配时忽略大小写

re.Ire.IGNORECASE

Singleline

单行模式,可穿透/n

re.Sre.DOTALL

Multiline

多行模式

re.Mre.MULTILINE

IgnorePatternWhitespace

忽略表达式中空白字符,若要使用空白字符

re.Xre.VERBOSE

代码 说明 举例

IgnoreCase 匹配时忽略大小写 re.Ire.IGNORECASE

Singleline 单行模式,可穿透/n re.Sre.DOTALL

Multiline 多行模式 re.Mre.MULTILINE

IgnorePatternWhitespace 忽略表达式中空白字符,若要使用空白字符 re.Xre.VERBOSE

Python中使用|(位或)运算开启多种选项

Python正则表达式

re模块

编译

  • re.compile(pattern, flags=0)

  • 返回正则表达式对象regex

  • 正则表达式编译的结果保存,下次使用同样的pattern时不需要重新编译

单次匹配

  • regex.match(string[, pos[, endpos]])

  • 从字符串开头匹配,可指定开始与结束位置 返回match对象

  • regex.search(string[, pos[, endpos]])

  • 从头搜索直到第一个匹配,可指定开始与结束位置 返回match对象

  • regex.fullmatch(string[, pos[, endpos]])

  • 整个字符串与正则表达式匹配

全文搜索

  • regex.findall(string[, pos[, endpos]])

  • 对整个字符串从左至右匹配,返回所有匹配项的列表

  • regex.finditer(string[, pos[, endpos]])

  • 对整个字符串,从左至右匹配,返回所有匹配项的迭代器,每项都是match对象

匹配替换

  • regex.sub(replacement, string, count=0)

  • 使用pattern对字符串string进行匹配,对匹配项用replacement替换

  • replacement可以是string、bytes、function

  • regex.subn(replacement, string, count=0)

  • 功能类似sub 返回一个元组 (new_string, number_of_subs_made)

分割字符串

  • regex.split(string, maxsplit=0)

  • 返回列表

分组

  • 使用(pattern)捕获的数据放到组中

  • match类方法

  • group(N)

  • 1-N时对应的分组 0但会整个匹配的字符串

  • 如果使用了命名分组,可用group(name)方式取出

  • groups()

  • 返回所有组的一个元组

  • groupdict()

  • 返回所有命名分组的字典