目录
split函数的功能是在分隔符处拆分字符串。
语法
newStr = split(str)
newStr = split(str,delimiter)
newStr = split(str,delimiter,dim)
[newStr,match] = split(___)
说明
newStr = split(str) 在空白字符处拆分 str 并以输出数组 newStr 的形式返回结果。输入数组 str 可以是字符串数组、字符向量或字符向量元胞数组。如果 str 是一个字符串数组,则 newStr 也是一个字符串数组。否则,newStr 为字符向量元胞数组。newStr 不包括 str 中的空白字符。
如果 str 是字符串数组或字符向量元胞数组,并且有多个元素,则每个元素必须可分成相同数量的子字符串。
-
如果 str 是一个字符串标量或字符向量,则 newStr 是一个 N×1 字符串数组或字符向量元胞数组,其中 N 是子字符串的数量。
-
如果 str 是一个 M×1 字符串数组或元胞数组,则 newStr 是一个 M×N 数组。
-
如果 str 是一个 1×M 字符串数组或元胞数组,则 newStr 是一个 1×M×N 数组。
对于任意大小的字符串数组或元胞数组,split 沿大小为 1 的第一个尾部维度确定 N 个子字符串的方向。
如果 str 的每个元素的子字符串数量不相同,则在 for 循环中调用 split,一次拆分 str 的一个元素。
newStr = split(str,delimiter) 在 delimiter 指定的分隔符处拆分 str 的每个元素。输出 newStr 不包括分隔符。
newStr = split(str,delimiter,dim) 将 str 的每个元素拆分为一个向量,该向量的方向为 dim 指定的维度方向。
[newStr,match] = split(___) 还返回一个数组 match,它包含作为 split 函数拆分 str 的位置而出现的所有分隔符。您可以将此语法与前面语法中的任何输入参数结合使用。
示例
在空白处拆分字符串并重新联接
在空白字符处拆分字符串数组中的姓名。然后重新排序并联接这些字符串,使姓在名的前面。创建一个包含姓名的 3×1 字符串数组。从 R2017a 开始,可以使用双引号创建字符串。
names = ["Mary Butler";
"Santiago Marquez";
"Diana Lee"]
names = 3x1 string
"Mary Butler"
"Santiago Marquez"
"Diana Lee"
如果使用的是 R2016b,请使用 string 函数而不是双引号来创建字符串数组。在空白字符处拆分 names,使其成为一个 3×2 字符串数组。
names = split(names)
names = 3x2 string
"Mary" "Butler"
"Santiago" "Marquez"
"Diana" "Lee"
将 names 的列交换位置,使姓在第一列。在每个姓后面添加一个逗号。
names = [names(:,2) names(:,1)];
names(:,1) = names(:,1) + ','
names = 3x2 string
"Butler," "Mary"
"Marquez," "Santiago"
"Lee," "Diana"
将姓和名联接起来。join 函数在它联接的字符串之间放置一个空格字符。联接之后,names 是一个 3×1 字符串数组。
names = join(names)
names = 3x1 string
"Butler, Mary"
"Marquez, Santiago"
"Lee, Diana"
在分隔符处拆分字符串并用新的分隔符联接
创建一个包含文件夹路径的字符串。从 R2017a 开始,可以使用双引号创建字符串。
myPath = "/Users/jdoe/My Documents/Examples"
myPath =
"/Users/jdoe/My Documents/Examples"
在 / 字符处拆分路径。split 将以 5×1 字符串数组的形式返回 myFolders。第一个字符串为 "",因为 myPath 以 / 字符开头。
myFolders = split(myPath,"/")
myFolders = 5x1 string
""
"Users"
"jdoe"
"My Documents"
"Examples"
使用 \ 作为分隔符,将 myFolders 联接成一个新路径。添加 C: 作为路径的开头。
myNewPath = join(myFolders,"\");
myNewPath = 'C:' + myNewPath
myNewPath =
"C:\Users\jdoe\My Documents\Examples"
使用模式作为分隔符拆分字符串
自 R2020b 开始提供
通过将文本视为分隔符从字符串中获取数字。使用模式匹配文本。然后将数字相加。
首先,创建一个包含数字的字符串。
str = "10 apples 3 bananas and 5 oranges"
str =
"10 apples 3 bananas and 5 oranges"
然后,创建一个匹配空白字符或字母的模式。
pat = " " | lettersPattern
pat = pattern
Matching:
" " | lettersPattern
使用 pat 作为分隔符拆分字符串。空字符串表示空白和其间没有任何内容的字母序列之间的拆分。例如,在 "10 apples" 中,分隔符 " " 之前有一个拆分,然后在 " " 和 "apples" 之间有一个拆分。由于分隔符 " " 和 "apples" 之间没有任何内容,split 函数返回空字符串来指示它们之间没有任何内容。
N = split(str,pat)
N = 11x1 string
"10"
""
""
"3"
""
""
""
""
"5"
""
""
丢弃空字符串,并保留表示数字的子字符串。
N = N(strlength(N) > 0)
N = 3x1 string
"10"
"3"
"5"
最后,将 N 转换为数值数组,并对其求和。
N = str2double(N);
sum(N)
ans = 18
有关创建模式对象的函数列表,可以参考pattern。
在多个分隔符处拆分字符串
创建一个字符串。从 R2017a 开始,可以使用双引号创建字符串。
str = "A horse! A horse! My kingdom for a horse!"
str =
"A horse! A horse! My kingdom for a horse!"
在感叹号和空白字符处拆分 str。newStr 是一个 10×1 字符串数组。最后一个字符串为空字符串 "",因为 str 中的最后一个字符是分隔符。
newStr = split(str,[" ","!"])
newStr = 12x1 string
"A"
"horse"
""
"A"
"horse"
""
"My"
"kingdom"
"for"
"a"
"horse"
""
沿指定维度定向字符串
创建一个包含姓名的 3×1 字符串数组。从 R2017a 开始,可以使用双引号创建字符串。
names = ["Mary Butler";
"Santiago Marquez";
"Diana Lee"]
names = 3x1 string
"Mary Butler"
"Santiago Marquez"
"Diana Lee"
在空白字符处拆分数组。默认情况下,split 沿大小为 1 的第一个尾随维度定向输出子字符串。因为 names 是一个 3×1 字符串数组,所以 split 沿 splitNames 的第二个维度(即列)来定向子字符串。
splitNames = split(names)
splitNames = 3x2 string
"Mary" "Butler"
"Santiago" "Marquez"
"Diana" "Lee"
要沿行(即第一个维度)定向子字符串,请在指定分隔符之后指定维度。splitNames 现在是一个 2×3 字符串数组,名在第一行,姓在第二行。
splitNames = split(names," ",1)
splitNames = 2x3 string
"Mary" "Santiago" "Diana"
"Butler" "Marquez" "Lee"
拆分字符串并返回分隔符
创建一个字符串。从 R2017a 开始,可以使用双引号创建字符串。
str = "bacon, lettuce, and tomato"
str =
"bacon, lettuce, and tomato"
在分隔符处拆分 str。在一个字符串数组中返回拆分结果,在第二个字符串数组中返回分隔符。当连续的分隔符之间没有任何文本时,split 将返回空字符串。
[newStr,match] = split(str,["and",","," "])
newStr = 7x1 string
"bacon"
""
"lettuce"
""
""
""
"tomato"
match = 6x1 string
","
" "
","
" "
"and"
" "
使用 join 函数将 newStr 和 match 重新联接起来。
originalStr = join(newStr,match)
originalStr =
"bacon, lettuce, and tomato"
输入参数
str - 输入文本
输入文本,指定为字符串数组、字符向量或字符向量元胞数组。
delimiter - 分隔子字符串
分隔子字符串,指定为下列值之一:
-
字符串数组
-
字符向量
-
字符向量元胞数组
-
pattern 数组(自 R2020b 开始提供)
在 delimiter 中指定的子字符串不会显示在输出 newStr 中。
在一个字符串数组、字符向量元胞数组或 pattern 数组中指定多个分隔符。split 函数根据 delimiter 的元素拆分 str。分隔符在 delimiter 中显示的顺序无关紧要,除非有多个分隔符都从 str 中的同一字符处开始匹配。在这种情况下,split 函数将在 delimiter 中的第一个匹配分隔符处进行拆分。
dim - 拆分字符串时所沿的维度
拆分字符串时所沿的维度,指定为正整数。如果不指定 dim,则默认值为大小不等于 1 的最后一个数组维度。
输出参数
newStr - 从原始数组拆分出来的子字符串
从原始数组拆分出来的子字符串,以字符串数组或字符向量元胞数组形式返回。如果输入数组 str 是字符串数组,则 newStr 也是字符串数组。否则,newStr 为字符向量元胞数组。
match - 找到的分隔符
标识的分隔符,以字符串数组或字符向量元胞数组形式返回。如果输入数组 str 是字符串数组,则 match 也是字符串数组。否则,match 为字符向量元胞数组。
match 包含的元素总是比输出 newStr 包含的元素少一个。