如何在正则表达式后显示名称?

时间:2012-12-12 21:30:34

标签: matlab

我正在尝试查找目录中与'hello'匹配的所有文件。我有以下代码:

fileData = dir();   
m_file_idx = 1;
fileNames = {fileData.name};  
index = regexp(filenames,'\w*hello\w*','match') ;
inFiles = fileNames(~cellfun(@isempty,index));

实施例。如果我的目录中有3个文件,其中包含单词hello,inFiles会返回

inFiles = 

    [1x23 char]    [1x26 char]    [1x25 char]

而我希望inFiles返回文件的名称,ex thisishello.m,hiandhello.txt 我怎么能以一种简单的方式做到这一点?

2 个答案:

答案 0 :(得分:2)

此代码:

fileData = dir();
fileNames = {fileData.name};

disp('The full directory...')
disp(fileNames)

index = regexp(fileNames,'\w*hello\w*','match');
inFiles = fileNames(~cellfun(@isempty,index));

disp('Print out the file names')
inFiles{:}

生成此输出:

>> script
The full directory...
  Columns 1 through 6

    '.'    '..'    'andsevenyears.txt'    'fourscore.txt'    'hello1.txt'    'hello2.txt'

  Column 7

    'script.m'

Print out the file names

ans =

hello1.txt


ans =

hello2.txt

对我来说,看起来你在理解单元格数组时遇到了一些问题。 Here's a specific tutorial that works through the米。 (jerad的链接看起来也是一个很好的资源)

答案 1 :(得分:1)

我认为这里发生的事情是,当一个单元格数组的元素超过一定长度时(字符串看起来是19个字符),matlab不打印实际元素,它会打印出内容的描述相反(在这种情况下,“[1x23 char]”)。

例如:

>> names = {'1234567890123456789' 'bar' 'car'}
names = 
    '1234567890123456789'    'bar'    'car'
>> names = {'12345678901234567890' 'bar' 'car'}
names = 
    [1x20 char]    'bar'    'car'

celldisp可能会更适合您的情况:

>> celldisp(names)
names{1} =
12345678901234567890
names{2} =
bar
names{3} =
car