如何在matlab中找到字符串数组中的子字符串?

时间:2014-06-30 15:30:49

标签: arrays string matlab find

我有一个字符串'ADSL'。我想在字符串数组char('PSTN,ADSL','ADSL,VDSL','FTTH,VDSL')

中找到这个字符串

当我运行此命令时

strmatch('ADSL',char('PSTN,ADSL','ADSL,VDSL','FTTH,VDSL'));

输出为2 但我希望输出为[1 2]

如果搜索字符串出现在行的开头,

strmatch只会给出正结果。

如果搜索字符串出现在行中的任何位置,我怎样才能找到它?

3 个答案:

答案 0 :(得分:3)

给出以下输入:

array = {'PSTN,ADSL', 'ADSL,VDSL', 'FTTH,VDSL'};
str = 'ADSL';

我们使用以下方法找到每个字符串匹配的起始位置:

>> pos = strfind(array, str)
pos = 
    [6]    [1]    []

>> pos = regexp(array, str)
pos = 
    [6]    [1]    []

然后我们可以使用以下方法找到匹配字符串的索引:

>> matches = find(~cellfun(@isempty,pos))
matches =
     1     2

答案 1 :(得分:1)

对于字符串数组,最好使用单元格数组。这样,字符串可以具有不同的长度(并且regexp可以同时应用于所有单元格):

cellArray = {'PSTN,ADSL','ADSL,VDSL','FTTH,VDSL'};
str = 'ADSL';

然后:

result = find(~cellfun('isempty', regexp(cellArray, str)));

会给你想要的东西。

如果您的示例中确实有一个char数组,

array = char('PSTN,ADSL','ADSL,VDSL','FTTH,VDSL');

您可以转换为单元格数组(使用cellstr)并应用上述内容:

result = find(~cellfun('isempty', regexp(cellstr(array), str)));

答案 2 :(得分:0)

我会使用strfind

a=strfind(cellstr(char('PSTN,ADSL','ADSL,VDSL','FTTH,VDSL')),'ADSL');
在这种情况下,

将是一个三个一个的单元格数组,其中包含字符串从相应字符串开始的索引