字符串分割函数
以下文档根据 system.functions 系统表自动生成。
alphaTokens
引入版本:v1.1
从 a-z 和 A-Z 范围内选取由连续字节组成的子字符串,并返回这些子字符串构成的数组。
语法
别名: splitByAlpha
参数
s— 要拆分的字符串。Stringmax_substrings— 可选。当max_substrings > 0时,返回的子字符串数量不超过max_substrings,否则函数将返回尽可能多的子字符串。Int64
返回值
返回由 s 中选定子字符串组成的数组。Array(String)
示例
用法示例
arrayStringConcat
自 v1.1 引入
使用提供的分隔符连接数组中各个值的字符串表示形式。分隔符是一个可选参数,默认值为空字符串。
语法
参数
arr— 要拼接的数组。Array(T)separator— 可选。分隔符字符串。默认值为空字符串。const String
返回值
返回拼接后的字符串。String
示例
用法示例
extractAllGroupsVertical
引入于:v20.5
使用正则表达式匹配字符串中的所有分组,并返回一个数组的数组,其中每个内部数组包含来自每个分组的匹配片段,这些片段按照它们在输入字符串中的出现顺序进行组织。
语法
别名: extractAllGroups
参数
s— 要从中提取内容的输入字符串。String或FixedStringregexp— 用于匹配的正则表达式。const String或const FixedString
返回值
返回一个数组的数组,其中每个内部数组包含一次匹配中捕获的分组内容。每次匹配都会生成一个数组,其元素对应于正则表达式中的各个捕获组(第 1 组、第 2 组等)。如果未找到匹配,则返回空数组。Array(Array(String))
示例
用法示例
ngrams
自 v21.11 起引入
将 UTF-8 字符串拆分为长度为 N 的 n-gram。
语法
参数
s— 输入字符串。String或FixedStringN— n-gram 的长度。const UInt8/16/32/64
返回值
返回一个由 n-gram 组成的数组。Array(String)
示例
使用示例
splitByChar
引入版本:v1.1
将以指定的、长度恰为一个字符的常量字符串 separator 作为分隔符的字符串拆分为子字符串数组。
如果分隔符出现在字符串的开头或结尾,或者存在多个连续分隔符,则可能产生空子字符串。
SETTING splitby_max_substrings_includes_remaining_string(默认值:0)用于控制当参数 max_substrings > 0 时,结果数组的最后一个元素中是否包含剩余字符串。
在以下情况下可能会选取空子字符串:
- 分隔符出现在字符串的开头或结尾
- 存在多个连续分隔符
- 原始字符串
s为空
语法
参数
separator— 分隔符,必须是单字节字符。Strings— 要分割的字符串。Stringmax_substrings— 可选。若max_substrings > 0,返回的数组最多包含max_substrings个子字符串,否则函数将返回尽可能多的子字符串。默认值为0。Int64
返回值
返回包含所选子字符串的数组。Array(String)
示例
使用示例
splitByNonAlpha
引入于:v21.9
将由空白和标点字符分隔的字符串拆分为子字符串数组。
splitby_max_substrings_includes_remaining_string(默认值:0)控制当参数 max_substrings > 0 时,结果数组的最后一个元素中是否包含剩余字符串。
语法
参数
s— 要拆分的字符串。Stringmax_substrings— 可选。当max_substrings > 0时,返回的子串数量最多为max_substrings;否则函数将返回尽可能多的子串。默认值:0。Int64
返回值
返回 s 中选定子串的数组。Array(String)
示例
使用示例
splitByRegexp
引入于:v21.6
根据给定的正则表达式,将字符串拆分为子字符串数组。 如果给定的正则表达式为空,则会将字符串拆分为由单个字符组成的数组。 如果正则表达式没有任何匹配,字符串不会被拆分。
可能会选中空子字符串的情况包括:
- 在字符串开头或结尾出现非空正则表达式匹配
- 存在多个连续的非空正则表达式匹配
- 原始字符串为空而正则表达式不为空。
设置 splitby_max_substrings_includes_remaining_string(默认值:0)用于控制当参数 max_substrings > 0 时,结果数组的最后一个元素中是否包含剩余字符串。
语法
参数
regexp— 正则表达式常量。String或FixedStrings— 要拆分的字符串。Stringmax_substrings— 可选。当max_substrings > 0时,返回的子字符串数量不超过max_substrings,否则函数会返回尽可能多的子字符串。默认值:0。Int64
返回值
返回 s 中选定子字符串的数组。Array(String)
示例
用法示例
空正则表达式
splitByString
引入版本:v1.1
使用由多个字符组成的常量分隔符 separator 将字符串拆分为子字符串数组。
如果分隔符字符串 separator 为空,则会将字符串 s 拆分为由单个字符组成的数组。
在以下情况下可能会产生空子字符串:
- 非空分隔符出现在字符串的开头或结尾
- 存在多个连续的非空分隔符
- 原始字符串
s为空,而分隔符不为空
当参数 max_substrings > 0 时,splitby_max_substrings_includes_remaining_string(默认值:0)用于控制结果数组的最后一个元素中是否包含剩余字符串。
语法
参数
separator— 分隔符。Strings— 要拆分的字符串。Stringmax_substrings— 可选。当max_substrings > 0时,返回的子串数量不超过max_substrings,否则函数将返回尽可能多的子串。默认值:0。Int64
返回值
返回由 s 中选取的子串组成的数组 Array(String)
示例
用法示例
空分隔符
splitByWhitespace
自 v21.9 起引入
将由空白字符分隔的字符串拆分为由子字符串组成的数组。
设置 splitby_max_substrings_includes_remaining_string(默认值:0)用于控制当参数 max_substrings > 0 时,结果数组的最后一个元素中是否包含剩余的字符串。
语法
参数
s— 要拆分的字符串。Stringmax_substrings— 可选参数。当max_substrings > 0时,返回的子串数量不超过max_substrings,否则函数会返回尽可能多的子串。默认值:0。Int64
返回值
返回由 s 中选取的子串构成的数组。Array(String)
示例
使用示例
tokens
引入版本:v21.11
使用给定的 tokenizer(分词器)将字符串拆分为若干 token。
可用的 tokenizer:
splitByNonAlpha按非字母数字的 ASCII 字符拆分字符串(另请参阅函数 splitByNonAlpha)。splitByString(S)按特定的用户自定义分隔字符串S拆分字符串(另请参阅函数 splitByString)。分隔符可以通过可选参数指定,例如tokenizer = splitByString([', ', '; ', '\n', '\\'])。注意每个分隔字符串可以由多个字符组成(示例中的', ')。如果未显式指定分隔符列表(例如tokenizer = splitByString),则默认分隔符列表为仅包含一个空格字符的数组[' ']。ngrams(N)将字符串拆分为等长的N-gram(另请参阅函数 ngrams)。ngram 的长度可以通过 1 到 8 之间的可选整数参数指定,例如tokenizer = ngrams(3)。如果未显式指定(例如tokenizer = ngrams),默认 ngram 大小为 3。sparseGrams(min_length, max_length, min_cutoff_length)将字符串拆分为长度在min_length到max_length(包含)之间的可变长度 n-gram(另请参阅函数 sparseGrams)。如果未显式指定,min_length和max_length的默认值分别为 3 和 100。如果提供参数min_cutoff_length,则只返回长度大于或等于min_cutoff_length的 n-gram。与ngrams(N)相比,sparseGramstokenizer 会生成可变长度的 N-gram,使原始文本的表示更加灵活。例如,tokenizer = sparseGrams(3, 5, 4)在内部会从输入字符串生成 3、4、5-gram,但只返回 4-gram 和 5-gram。array不执行任何分词操作,即每一行的值就是一个 token(另请参阅函数 array)。
对于 splitByString tokenizer,如果各个分隔符不能构成 prefix code,通常希望在匹配时优先选择更长的分隔符。
为此,请按分隔符长度的递减顺序传入。
例如,当 separators = ['%21', '%'] 时,字符串 %21abc 会被分词为 ['abc'],而 separators = ['%', '%21'] 则会被分词为 ['21ac'](这很可能不是预期的结果)。
语法
参数
value— 输入字符串。String或FixedStringtokenizer— 要使用的分词器。可用参数为splitByNonAlpha、ngrams、splitByString、array和sparseGrams。可选参数,如果未显式设置,默认为splitByNonAlpha。const Stringn— 仅当参数tokenizer为ngrams时生效:一个可选参数,用于定义 ngram 的长度。如果未显式设置,默认为3。const UInt8separators— 仅当参数tokenizer为split时生效:一个可选参数,用于定义分隔符字符串。如果未显式设置,默认为[' ']。const Array(String)min_length— 仅当参数tokenizer为sparseGrams时生效:一个可选参数,用于定义最小 gram 长度,默认为 3。const UInt8max_length— 仅当参数tokenizer为sparseGrams时生效:一个可选参数,用于定义最大 gram 长度,默认为 100。const UInt8min_cutoff_length— 仅当参数tokenizer为sparseGrams时生效:一个可选参数,用于定义最小截断长度。const UInt8
返回值
返回由输入字符串生成的 token 数组。Array
示例
默认分词器
N-gram 分词器