目录
strfind函数的功能是在其他字符串中查找字符串。
语法
k = strfind(str,pat)
k = strfind(str,pat,'ForceCellOutput',cellOutput)
说明
k = strfind(str,pat) 在 str 中搜索出现的 pat。输出 k 指示 str 中每次出现的 pat 的起始索引。如果未找到 pat,则 strfind 返回一个空数组 []。strfind 函数执行区分大小写的搜索。
如果 str 是字符向量或字符串标量,则 strfind 返回 double 类型的向量。
如果 str 是字符向量元胞数组或字符串数组,则 strfind 返回 double 类型的向量元胞数组。
当 cellOutput 为 true 时,即使 str 是字符向量,k = strfind(str,pat,'ForceCellOutput',cellOutput) 也会强制 strfind 以元胞数组形式返回 k。
示例
在字符向量中查找子字符串
在字符向量中查找子字符串的起始索引。首先,创建一个字符向量。
str = 'Find the starting indices of substrings in a character vector';
查找子字符串 in。
k = strfind(str,'in')
k = 1×5
2 15 19 36 41
str 中有五个实例。查找子字符串 In。
k = strfind(str,'In')
k =
[]
由于 strfind 区分大小写,未找到子字符串。k 是一个空数组。在 str 中查找空白。
k = strfind(str,' ')
k = 1×9
5 9 18 26 29 40 43 45 55
str 中有十处空白。
使用模式查找字母和单词
创建字符向量。(自 R2020b 开始提供)
str = 'Find the letters.'
str =
'Find the letters.'
使用 lettersPattern 函数创建匹配字母序列的模式。
pat = lettersPattern
pat = pattern
Matching:
lettersPattern
查找每个字母的索引。当 pat 匹配任意长度的字母序列时,strfind 会在找到一个匹配项时立即停止,然后继续下一个匹配。例如,'Find' 和 'F' 都与 lettersPattern 匹配,因为没有指定匹配的字母数。但是,strfind 首先匹配 'F',并返回其索引。然后 strfind 匹配 'i',依此类推。(可以调用带可选参数(指定要匹配的字母数)的 lettersPattern。)
k = strfind(str,pat)
k = 1×14
1 2 3 4 6 7 8 10 11 12 13 14 15 16
要查找单词的开头,请调用带边界的 lettersPattern。letterBoundary 函数匹配字母和非字母字符之间的边界。
pat = letterBoundary + lettersPattern
pat = pattern
Matching:
letterBoundary + lettersPattern
k = strfind(str,pat)
k = 1×3
1 6 10
有关创建模式对象的函数列表,可以参考pattern函数。
在元胞数组中查找子字符串
在字符向量元胞数组中查找子字符串的起始索引。创建字符向量元胞数组。
str = {'How much wood would a woodchuck chuck';
'if a woodchuck could chuck wood?'};
在 str 中查找 wood。
idx = strfind(str,'wood')
idx=2×1 cell array
{[10 23]}
{[ 6 28]}
检查输出元胞数组以查找 wood 的实例。
idx{:,:}
ans = 1×2
10 23
ans = 1×2
6 28
子字符串 wood 在第一个字符向量的索引 10 和 23 处出现,在第二个字符向量的索引 6 和 28 处出现。
以元胞数组形式返回索引
在字符向量中查找子字符串的所有出现处。强制 strfind 以元胞数组形式返回这些出现处的索引。然后显示这些索引。
创建一个字符向量并查找 ain 模式的所有出现处。
str = 'The rain in Spain.';
k = strfind(str,'ain','ForceCellOutput',true)
k = 1x1 cell array
{[6 15]}
strfind 返回一个包含数值数组的标量元胞,该数值数组包含子字符串 ain 在 str 中的所有出现处的索引。要访问元胞中的数值数组,请使用花括号。
k{1}
ans = 1×2
6 15
提示
-
如果 pat 是不包含任何字符的字符向量或字符串标量('' 或 ""),则 strfind 将返回一个空数组。
-
建议使用 contains 函数在字符串数组中查找模式。