re – 简单的正则表达式

This module implements a subset of the corresponding CPython module, as described below. For more information, refer to the original CPython documentation: re

该模块实现了正则表达式操作。支持的正则表达式语法是 CPython re 模块的子集(实际上是 POSIX 扩展正则表达式的子集)。

支持的运算符和特殊序列包括:

.

匹配任字符。

[...]

匹配字符集。支持单个字符和范围,包括否定集(例如,[^a-c])。

^

匹配字符串的开头。

$

匹配字符串的结尾。

?

匹配前一个子模式的零个或一个。

*

匹配前一个子模式的零个或多个。

+

匹配前一个子模式的一个或多个。

??

? 的非贪婪版本,匹配零个或一个,优先匹配零个。

*?

* 的非贪婪版本,匹配零个或多个,优先匹配最短匹配。

+?

+ 的非贪婪版本,匹配一个或多个,优先匹配最短匹配。

|

匹配该运算符的左边或右边子模式。

(...)

分组。每个组都是捕获的(可以通过 match.group() 方法访问其捕获的子字符串)。

\d

匹配数字。相当于 [0-9]

\D

匹配非数字。相当于 [^0-9]

\s

匹配空白字符。相当于 [ \t-\r]

\S

匹配非空白字符。相当于 [^ \t-\r]

\w

匹配 “word characters”(仅 ASCII)。相当于 [A-Za-z0-9_]

\W

匹配非 “word characters”(仅 ASCII)。相当于 [^A-Za-z0-9_]

\

转义字符。除上面列出的字符外,反斜杠后面的任何其他字符都是字面意思。例如,\* 等同于字面上的 * (不会被视为 * 运算符)。请注意,\r\n 等不会被特殊处理,将等同于字面上的字母 rn 等。因此,不建议对正则表达式使用原始 Python 字符串( r"" )。例如,用作正则表达式的 r"\r\n" 等同于 "rn" 。要匹配 CR 字符后跟 LF,请使用 "\r\n"

不支持

  • 计数重复({m,n}

  • 命名组((?P<name>...)

  • 非捕获组((?:...)

  • 更高级的断言(\b\B

  • 特殊字符转义如 \r\n - 使用 Python 自己的转义

  • 等等。

例子:

import re

# As re doesn't support escapes itself, use of r"" strings is not
# recommended.
regex = re.compile("[\r\n]")

regex.split("line1\rline2\nline3\r\n")

# Result:
# ['line1', 'line2', 'line3', '', '']

函数

re.compile(regex_str[, flags])

编译正则表达式,返回 regex 对象。

re.match(regex_str, string)

编译 regex_str 并匹配 string。匹配始终从字符串的起始位置开始。

re.search(regex_str, string)

编译 regex_str 并在 string 中搜索它。与 match 不同,这将搜索第一个与正则表达式匹配的位置(如果正则表达式被锚定,则仍可能为 0)。

re.sub(regex_str, replace, string, count=0, flags=0, /)

编译 regex_str 并在 string 中搜索它,用 replace 替换所有匹配项,并返回新字符串。

replace 可以是字符串或函数。如果是字符串,则可以使用形式为 \<number>\g<number> 的转义序列来扩展到相应的组(或对于未匹配的组扩展为空字符串)。如果 replace 是一个函数,则必须接受一个参数(匹配项),并应返回一个替换字符串。

如果指定了 count 并且非零,则替换将在进行此数量的替换后停止。忽略 flags 参数。

注意:此函数的可用性取决于 MicroPython 移植版本

re.DEBUG

标志值,显示有关编译表达式的调试信息。(可用性取决于 MicroPython 移植版本。)

正则表达式对象

已编译的正则表达式。使用 re.compile() 创建此类的实例。

regex.match(string)
regex.search(string)
regex.sub(replace, string, count=0, flags=0, /)

类似于模块级函数 match()search()sub()。如果对多个字符串应用相同的正则表达式,则使用方法效率更高。

regex.split(string, max_split=-1, /)

使用正则表达式拆分 string。如果给定 max_split,它指定要执行的最大拆分数。返回字符串列表(如果指定了,则可能有多达 max_split+1 个元素)。

匹配对象

match()search() 方法返回,并传递给 sub() 中的替换函数的匹配对象。

match.group(index)

返回匹配的(子)字符串。对于整个匹配,index 为 0,对于每个捕获组,index 为 1 及以上。仅支持数字组。

match.groups()

返回一个包含匹配 的所有组的子字符串的元组。

注意:此方法的可用性取决于 MicroPython 移植版本

match.start([index])
match.end([index])

返回原始字符串中匹配的子字符串组的开始或结束索引。index 默认为整个组,否则将选择一个组。

注意:这些方法的可用性取决于 MicroPython 移植版本

match.span([index])

返回 2 元组 (match.start(index), match.end(index))

注意:此方法的可用性取决于 MicroPython 移植版本