正则表达式特性#
此页面详细说明了 libcudf 字符串列 API 当前支持的正则表达式 (regex) 特性,这些 API 接受正则表达式模式
cudf::strings::contains_re()
cudf::strings::matches_re()
cudf::strings::count_re()
cudf::strings::extract()
cudf::strings::extract_all_record()
cudf::strings::findall()
cudf::strings::find_re()
cudf::strings::replace_re()
cudf::strings::replace_with_backrefs()
cudf::strings::split_re()
cudf::strings::split_record_re()
详细信息基于 https://regexper.cn/reference.html 中记录的特性
注意:交替字符是管道字符 |
,而不是此页面表格中包含的字符。在由 doxygen 渲染的表格 markdown 中包含管道字符存在问题。
默认情况下,只有 \n
字符被识别为换行符。[cudf::strings::regex_flags::EXT_NEWLINE](@ref cudf::strings::regex_flags) 增加了换行符集,包括
段落分隔符 (Unicode:
2029
, UTF-8:E280A9
)行分隔符 (Unicode:
2028
, UTF-8:E280A8
)下一行 (Unicode:
0085
, UTF-8:C285
)回车符 (Unicode:
000D
, UTF-8:0D
)
无效的正则表达式模式将导致未定义行为。这包括但不限于以下情况
当特殊字符(列在下面 Characters 表的第三行)意图匹配为字面值时未转义。
不成对的特殊字符,如
()
、[]
和{}
。空的组、类或量词。即,没有包含表达式的
()
和[]
,以及没有有效整数的{}
。字符类中的不完整范围,如
[-z]
、[a-]
和[-]
。不合格的量词。即,没有先行匹配项的量词,如
*a
、a⎮?
、(+)
、{2}a
等。
支持的特性#
字符#
特性 |
语法 |
描述 |
示例 |
---|---|---|---|
字面字符 |
除了 |
除了列出的特殊字符之外的所有字符都匹配其自身的一个实例 |
|
字面大括号 |
|
|
|
反斜杠转义元字符 |
|
反斜杠转义特殊字符以抑制它们的特殊含义 |
|
十六进制转义 |
|
匹配 ASCII 表中指定位置的字符 |
|
字符转义 |
|
分别匹配换行 (LF) 字符、回车 (CR) 字符和制表符 |
|
字符转义 |
|
匹配“alert”或“bell”控制字符 (ASCII 0x07) |
|
字符转义 |
|
匹配换页控制字符 (ASCII 0x0C) |
|
NULL 转义 |
|
匹配 NULL 字符 |
|
八进制转义 |
|
匹配 ASCII 表中指定位置的字符 |
|
基本特性#
特性 |
语法 |
描述 |
示例 |
---|---|---|---|
点 |
. (点) |
匹配除了换行符之外的任何单个字符。可选地匹配换行符。点在遇到 |
. 匹配 x 或(几乎)任何其他字符 |
交替 |
|
使正则表达式引擎匹配左侧或右侧的部分。可以连接成一系列交替。 |
|
字符类#
特性 |
语法 |
描述 |
示例 |
---|---|---|---|
字符类 |
|
|
|
字面字符 |
除了 |
除了列出的特殊字符之外的所有字符都是字面字符,它们将自身添加到字符类中。 |
|
反斜杠转义元字符 |
|
反斜杠转义特殊字符以抑制它们的特殊含义。 |
|
范围 |
在两个指定单个字符的 token 之间的 |
向字符类添加一个字符范围。如果 ‘ |
|
否定字符类 |
紧跟在开头 |
否定字符类,使其匹配字符类中未列出的单个字符。 |
|
字面左括号 |
|
左方括号是一个字面字符,它将左方括号添加到字符类中。 |
|
字符转义 |
|
分别向字符类添加 LF 字符、CR 字符或制表符。 |
|
字符转义 |
|
向字符类添加“alert”或“bell”控制字符 (ASCII 0x07)。 |
|
字符转义 |
|
向字符类添加退格控制字符 (ASCII 0x08)。 |
|
字符转义 |
|
向字符类添加换页控制字符 (ASCII 0x0C)。 |
|
简写字符类#
特性 |
语法 |
描述 |
示例 |
---|---|---|---|
简写 |
|
将所有数字添加到字符类。如果在字符类外部使用,匹配单个数字。该行为可以通过 [cudf::strings::regex_flags::ASCII](@ref cudf::strings::regex_flags) 控制,仅包含 |
|
简写 |
|
将所有单词字符添加到字符类。如果在字符类外部使用,匹配单个单词字符。该行为可以通过 [cudf::strings::regex_flags::ASCII](@ref cudf::strings::regex_flags) 控制,仅包含 |
|
简写 |
|
将所有空白字符添加到字符类。如果在字符类外部使用,匹配单个空白字符。该行为可以通过 [cudf::strings::regex_flags::ASCII](@ref cudf::strings::regex_flags) 控制,仅包含 |
|
简写 |
|
将所有非数字字符添加到字符类。如果在字符类外部使用,匹配一个非数字字符。该行为可以通过 [cudf::strings::regex_flags::ASCII](@ref cudf::strings::regex_flags) 控制 |
|
简写 |
|
将所有非单词字符添加到字符类。如果在字符类外部使用,匹配一个非单词字符。该行为可以通过 [cudf::strings::regex_flags::ASCII](@ref cudf::strings::regex_flags) 控制 |
[ |
简写 |
|
将所有非空白字符添加到字符类。如果在字符类外部使用,匹配一个非空白字符。该行为可以通过 [cudf::strings::regex_flags::ASCII](@ref cudf::strings::regex_flags) 控制 |
|
锚点#
特性 |
语法 |
描述 |
示例 |
---|---|---|---|
字符串锚点 |
|
匹配字符串的开头 |
|
行锚点 |
|
当指定 [cudf::strings::regex_flags::MULTILINE](@ref cudf::strings::regex_flags) 时:除了匹配字符串开头外,还在每个换行符后匹配,从而匹配字符串中每行的开头。 |
|
字符串锚点 |
|
匹配字符串的结尾以及字符串中最后一个换行符之前的位置 |
|
行锚点 |
|
当指定 [cudf::strings::regex_flags::MULTILINE](@ref cudf::strings::regex_flags) 时:除了匹配字符串结尾外,还在每个换行符前匹配,从而匹配字符串中每行的结尾。 |
|
字符串锚点 |
|
匹配字符串的开头 |
匹配字符串的开头 |
字符串锚点 |
|
\Z |
匹配字符串的结尾 |
\w\Z
匹配 abc\ndef
中的 f
,但无法匹配 abc\ndef\n
匹配前面和后面都是单词字符,或者前面和后面都不是单词字符的位置。
特性 |
语法 |
描述 |
示例 |
---|---|---|---|
|
量词# |
贪婪量词 |
|
|
使前面的项可选。贪婪匹配,因此如果可能,可选项目会包含在匹配中。 |
|
|
|
重复前面的项零次或多次。贪婪匹配,因此会尽可能多地匹配项目,然后尝试匹配较少前面的项的排列,直到前面的项根本不匹配为止。 |
|
|
重复前面的项一次或多次。贪婪匹配,因此会尽可能多地匹配项目,然后尝试匹配较少前面的项的排列,直到前面的项仅匹配一次为止。 |
|
|
惰性量词 |
重复前面的项一次或多次。贪婪匹配,因此会尽可能多地匹配项目,然后尝试匹配较少前面的项的排列,直到前面的项仅匹配一次为止。 |
|
|
使前面的项可选。惰性匹配,因此如果可能,可选项目会排除在匹配之外。 |
重复前面的项一次或多次。贪婪匹配,因此会尽可能多地匹配项目,然后尝试匹配较少前面的项的排列,直到前面的项仅匹配一次为止。 |
|
|
|
重复前面的项零次或多次。惰性匹配,因此引擎首先尝试跳过前面的项,然后尝试匹配越来越多的前面的项的排列。 |
|
|
重复前面的项一次或多次。惰性匹配,因此引擎首先仅匹配前面的项一次,然后尝试匹配越来越多的前面的项的排列。 |
|
|
固定量词 |
|
|
精确重复前面的项 |
|
|
重复前面的项一次或多次。贪婪匹配,因此会尽可能多地匹配项目,然后尝试匹配较少前面的项的排列,直到前面的项仅匹配一次为止。 |
重复前面的项 |
|
|
重复前面的项一次或多次。贪婪匹配,因此会尽可能多地匹配项目,然后尝试匹配较少前面的项的排列,直到前面的项仅匹配一次为止。 |
重复前面的项至少 |
|
|
重复前面的项 n
到 m
次之间。惰性匹配,因此会先尝试重复 n
次,然后再增加重复次数到 m
次。
特性 |
语法 |
描述 |
示例 |
---|---|---|---|
|
|
重复前面的项 |
|
分组# |
|
(regex) |
括号将其中的正则表达式分组。它们将内部正则表达式匹配的文本捕获到一个编号组中。它们允许您将正则表达式运算符应用于整个分组的正则表达式。 |
(abc⎮def)ghi
匹配 abcghi
或 defghi
特性 |
语法 |
描述 |
示例 |
---|---|---|---|
非捕获组 |
(?:regex) |
非捕获括号将正则表达式分组,以便您可以应用正则表达式运算符,但不捕获任何内容。 |
|
非捕获组 |
替换反向引用# |
非捕获括号将正则表达式分组,以便您可以应用正则表达式运算符,但不捕获任何内容。 |
反向引用 |
|
|
插入由捕获组 1 到 99 匹配的文本 |
将 |