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

Find variables in base Workspace with partial string match (Matlab)

我想知道如何通过仅输入变量名称的一部分来在基础 MATLAB 工作区中查找变量。我有一长串变量,我不知道确切的变量名称。在可变字符串列表中是否有 compares/matches 字符顺序的函数?

谢谢,

您可以使用 who to obtain a list of all variable names currently in your workspace. From there, you can use regexpi to do a case insensitive regular expression 查找来查找与您的查询匹配的变量。类似于:

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

nameOfVariable 是您要搜索的变量的名称或部分名称。 outStr 将为您提供一个元素元胞数组,其大小与工作区中的变量总数相同。如果此输出元胞数组中的元素为空,则相应的工作区变量不匹配。如果它是 非空,则匹配成功。我们只需遍历此输出元胞数组并确定哪些位置是 非空 ,然后我们使用这些索引到我们的工作区名称数组中以检索您想要的那些最终变量(存储在 vars). cellfun allows you to iterate over every element in a cell array and apply a function to it. In this case, we want to check every cell to see if it's empty by using 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'

更简单

山姆·罗伯茨获得了这个小费。您可以简单地应用 -regexp 标志并指定您要查找的模式:

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

vars = 

'possible_names'
'possible_surnames'