使用部分字符串匹配在基础工作区中查找变量(Matlab)

时间:2015-02-18 19:18:14

标签: string matlab variables match partial

我想知道如何通过只输入其名称的一部分在基础MATLAB工作区中找到变量。我有一长串变量&我不知道确切的变量名称。是否有一个函数可以比较/匹配变量字符串列表中的字符顺序?

谢谢,

1 个答案:

答案 0 :(得分:4)

您可以使用who获取当前工作区中所有变量名称的列表。在那里,您可以使用regexpi进行案例不敏感 regular expression查找,以查找与您的查询匹配的变量。类似的东西:

namesWorkspace = who;
outStr = regexpi(namesWorkspace, 'nameOfVariable');
ind = ~cellfun('isempty',outStr);
vars = namesWorkspace(ind);

nameOfVariable是您要搜索的变量的名称或部分名称。 outStr将为您提供一个元素单元格数组,其大小与工作区中变量的总数相同。如果此输出单元数组中的元素为空,则不匹配相应的工作空间变量。如果它是非空,则表示匹配。我们只需通过这个输出单元格数组并确定哪些位置非空,然后我们使用它们索引到我们的工作空间名称数组中以检索所需的最终变量(存储在vars中)。 cellfun允许您迭代单元数组中的每个元素并对其应用函数。在这种情况下,我们希望使用isempty检查每个单元格以查看它是否为空。因为我们想要相反,我们需要反转操作,因此使用~

例如,这是我最近回答问题后的工作区:

names = 

    'O'
    'ans'
    'cellData'
    'idx'
    'names'
    'out'
    'possible_names'
    'possible_surnames'
    'student_information'

让我们找到那些包含单词possible的变量名:

outStr = regexpi(namesWorkspace, 'possible');
ind = ~cellfun('isempty',outStr);
vars = namesWorkspace(ind)

vars = 

    'possible_names'
    'possible_surnames'

更简单

小费的提示是Sam Roberts的提示。您只需应用-regexp标志并指定要查找的模式:

vars = who('-regexp', 'possible')

vars = 

'possible_names'
'possible_surnames'