目录
strsplit函数的功能是在指定分隔符处拆分字符串或字符向量。
语法
C = strsplit(str)
C = strsplit(str,delimiter)
C = strsplit(str,delimiter,Name,Value)
[C,matches] = strsplit(___)
说明
C = strsplit(str) 在空白处将 str 拆分为 C。空白字符等效于集合 {' ','\f','\n','\r','\t','\v'} 中的任何转义序列。
如果 str 具有连续的空白字符,则 strsplit 将它们视为一个空格。
C = strsplit(str,delimiter) 在 delimiter 指定的分隔符处拆分 str。
如果 str 具有连续的分隔符,并且它们之间没有其他字符,则 strsplit 将它们视为一个分隔符。例如,strsplit('Hello,world',',') 和 strsplit('Hello,,,world',',') 返回相同的输出。
C = strsplit(str,delimiter,Name,Value) 使用一个或多个名称-值对组参数指定其他分隔符选项。例如,要将连续分隔符视为单独的分隔符,可以指定 'CollapseDelimiters',false。
[C,matches] = strsplit(___) 还返回数组 matches。matches 输出参数包含 strsplit 拆分 str 时遇到的所有分隔符。您可将此语法与上述语法中的任何输入参数一起使用。
示例
在空白处拆分字符向量
str = 'The rain in Spain.';
C = strsplit(str)
C = 1x4 cell
{'The'} {'rain'} {'in'} {'Spain.'}
C 是一个包含四个字符向量的元胞数组。
在特定分隔符处拆分值的字符向量
拆分包含逗号分隔值的字符向量。
data = '1.21, 1.985, 1.955, 2.015, 1.885';
C = strsplit(data,', ')
C = 1x5 cell
{'1.21'} {'1.985'} {'1.955'} {'2.015'} {'1.885'}
拆分字符向量 data,其中包含数值文本、单位 m/s,且文本任意一侧可能有任意数量的空白。正则表达式 \s* 匹配出现零次或多次的任何空白字符。
data = '1.21m/s1.985m/s 1.955 m/s2.015 m/s 1.885m/s';
[C,matches] = strsplit(data,'\s*m/s\s*',...
'DelimiterType','RegularExpression')
C = 1x6 cell
{'1.21'} {'1.985'} {'1.955'} {'2.015'} {'1.885'} {0x0 char}
matches = 1x5 cell
{'m/s'} {'m/s '} {' m/s'} {' m/s '} {'m/s'}
在这种情况下,C 中的最后一个字符向量为空。此空字符向量在最后一个匹配的分隔符后。
根据文件分隔符拆分路径
myPath = 'C:\work\matlab';
C = strsplit(myPath,'\')
C = 1x3 cell
{'C:'} {'work'} {'matlab'}
拆分具有多个分隔符的字符向量
根据 ' ' 和 'ain' 拆分字符向量,并将多个分隔符作为一个分隔符处理。在字符向量元胞数组中指定多个分隔符。
str = 'The rain in Spain stays mainly in the plain.';
[C,matches] = strsplit(str,{' ','ain'},'CollapseDelimiters',true)
C = 1x11 cell
{'The'} {'r'} {'in'} {'Sp'} {'stays'} {'m'} {'ly'} {'in'} {'the'} {'pl'} {'.'}
matches = 1x10 cell
{' '} {'ain '} {' '} {'ain '} {' '} {'ain'} {' '} {' '} {' '} {'ain'}
根据空白和 'ain' 拆分同一字符向量,使用正则表达式并分开处理多个分隔符。
[C,matches] = strsplit(str,{'\s','ain'},'CollapseDelimiters',...
false, 'DelimiterType','RegularExpression')
C = 1x13 cell
{'The'} {'r'} {0x0 char} {'in'} {'Sp'} {0x0 char} {'stays'} {'m'} {'ly'} {'in'} {'the'} {'pl'} {'.'}
matches = 1x12 cell
{' '} {'ain'} {' '} {' '} {'ain'} {' '} {' '} {'ain'} {' '} {' '} {' '} {'ain'}
在这种情况下,strsplit 分开处理两个分隔符,因此输出 C 中连续匹配的分隔符之间显示了空字符向量。
拆分具有多个重叠分隔符的文本
根据字符向量 ', ' 和 ', and ' 拆分文本。
str = 'bacon, lettuce, and tomato';
[C,matches] = strsplit(str,{', ',', and '})
C = 1x3 cell
{'bacon'} {'lettuce'} {'and tomato'}
matches = 1x2 cell
{', '} {', '}
由于该命令首先列出 ', ' 并且 ', and ' 包含 ', ',因此 strsplit 函数根据第一个分隔符拆分 str 并且不再继续处理到第二个分隔符。
如果颠倒分隔符的顺序,则 ', and ' 具有更高优先级。
str = 'bacon, lettuce, and tomato';
[C,matches] = strsplit(str,{', and ',', '})
C = 1x3 cell
{'bacon'} {'lettuce'} {'tomato'}
matches = 1x2 cell
{', '} {', and '}
参数说明
str — 输入文本
输入文本,指定为字符向量或字符串标量。
delimiter — 分隔字符
分隔字符,指定为字符向量、1×n 字符向量元胞数组或 1×n 字符串数组。在 delimiter 中指定的文本不会显示在输出 C 中。
在元胞数组或字符串数组中指定多个分隔符。strsplit 函数根据 delimiter 的元素拆分 str。分隔符在 delimiter 中显示的顺序无关紧要,除非有多个分隔符都从 str 中的同一字符处开始匹配。在此种情况下,strsplit 将在 delimiter 中的第一个匹配分隔符处进行拆分。
delimiter 可以包含下列转义序列:
\\ | 反斜杠 |
\0 | 空值 |
\a | 警报 |
\b | 退格符 |
\f | 换页符 |
\n | 换行符 |
\r | 回车符 |
\t | 水平制表符 |
\v | 垂直制表符 |
C — 原始文本的一部分
原始字符向量的一部分,以字符向量元胞数组或字符串数组形式返回。C 始终比 matches 多包含一个元素。因此,如果 str 以分隔符开头,则 C 的第一个元素不包含任何字符。如果 str 以分隔符结尾,则 C 中的最后一个元胞不包含任何字符。
matches — 找到的分隔符
标识的分隔符,以字符向量元胞数组或字符串数组形式返回。matches 始终比输出 C 少包含一个元素。如果 str 是字符向量或字符向量元胞数组,则 matches 是元胞数组。如果 str 是字符串数组,则 matches 是字符串数组。