Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

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 字符串数组。

names = ["Mary Butler";
         "Santiago Marquez";
         "Diana Lee"]
names = 3x1 string
    "Mary Butler"
    "Santiago Marquez"
    "Diana Lee"

在空白字符处拆分 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"

创建一个包含文件夹路径的字符串。

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

创建一个字符串。

str = "A horse! A horse! My kingdom for a horse!"
str = 
"A horse! A horse! My kingdom for a horse!"

在感叹号和空白字符处拆分 strnewStr 是一个 10×1 字符串数组。最后一个字符串为空字符串 "",因为 str 中的最后一个字符是分隔符。

newStr = split(str,[" ","!"])
newStr = 12x1 string
    "A"
    "horse"
    ""
    "A"
    "horse"
    ""
    "My"
    "kingdom"
    "for"
    "a"
    "horse"
    ""

创建一个字符串数组,其中每个元素包含一位患者的数据,数据之间以逗号分隔。

patients = ["LastName,Age,Gender,Height,Weight";
            "Adams,47,F,64,123";
            "Jones,,,68,175";
            "King,,M,66,180";
            "Smith,38,F,63,118"]
patients = 5x1 string
    "LastName,Age,Gender,Height,Weight"
    "Adams,47,F,64,123"
    "Jones,,,68,175"
    "King,,M,66,180"
    "Smith,38,F,63,118"

拆分字符串数组。两个逗号之间什么也没有即表示缺失数据。如果 split 在拆分时遇到重复的分隔符,它会返回空字符串作为输出数组中的对应元素。

patients = split(patients,",")
patients = 5x5 string
    "LastName"    "Age"    "Gender"    "Height"    "Weight"
    "Adams"       "47"     "F"         "64"        "123"   
    "Jones"       ""       ""          "68"        "175"   
    "King"        ""       "M"         "66"        "180"   
    "Smith"       "38"     "F"         "63"        "118"   

创建一个包含姓名的 3×1 字符串数组。

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"  

创建一个字符串。

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 函数将 newStrmatch 重新联接起来。

originalStr = join(newStr,match)
originalStr = 
"bacon, lettuce, and tomato"

输入参数

全部折叠

输入文本,指定为字符串数组、字符向量或字符向量元胞数组。

分隔子字符串,指定为下列值之一:

  • 字符串数组

  • 字符向量

  • 字符向量元胞数组

  • pattern 数组(自 R2020b 开始提供)

delimiter 中指定的子字符串不会显示在输出 newStr 中。

在一个字符串数组、字符向量元胞数组或 pattern 数组中指定多个分隔符。split 函数根据 delimiter 的元素拆分 str。分隔符在 delimiter 中显示的顺序无关紧要,除非有多个分隔符都从 str 中的同一字符处开始匹配。在这种情况下,split 函数将在 delimiter 中的第一个匹配分隔符处进行拆分。

示例: split(str,{' ',',','--'}) 在出现空格、逗号和连续短划线对组的位置拆分 str

拆分字符串时所沿的维度,指定为正整数。如果不指定 dim,则默认值为大小不等于 1 的最后一个数组维度。

输出参数

全部折叠

从原始数组拆分出来的子字符串,以字符串数组或字符向量元胞数组形式返回。如果输入数组 str 是字符串数组,则 newStr 也是字符串数组。否则,newStr 为字符向量元胞数组。

标识的分隔符,以字符串数组或字符向量元胞数组形式返回。如果输入数组 str 是字符串数组,则 match 也是字符串数组。否则,match 为字符向量元胞数组。

match 包含的元素总是比输出 newStr 包含的元素少一个。

扩展功能

版本历史记录

在 R2016b 中推出