想象一下,我有一个包含两个文件名的单元格数组:
filenames{1,1} = 'SMCSx0noSat48VTFeLeakTrace.txt';
filenames{2,1} = 'SMCSx0NoSat48VTrace.txt';
我想获取以'SMCSx0'
开头并包含过滤字'NoSat48VTrace'
的文件名:
%// case 1
expression = 'SMCSx0';
filterword = 'NoSat48VTrace';
regs = regexp(filenames, ['^' expression '.*\' filterword '.*\.txt$'])
mask = ~cellfun(@isempty,regs);
file = filenames(mask)
它有效,我明白了:
file =
'SMCSx0NoSat48VTrace.txt'
但无论出于何种原因,将过滤字更改为'noSat48VTFeLeakTrace'
都不会让我获得另一个文件?
%// case 2
expression = 'SMCSx0';
filterword = 'noSat48VTFeLeakTrace';
regs = regexp(filenames, ['^' expression '.*\' filterword '.*\.txt$'])
mask = ~cellfun(@isempty,regs);
file = filenames(mask)
与以前完全相同,但是
file =
Empty cell array: 0-by-1
我实际上在函数中使用这些行数月,没有问题。但是现在我在我的文件夹中添加了一些找不到的文件,尽管它们的名字与以前类似。任何提示?
实际上它应该在没有将Trace
包含在过滤字中的情况下工作,这是第一种情况,这就是我将.*\
放入正则表达式的原因。
%// case 1
expression = 'SMCSx0';
filterword = 'NoSat48V';
... works
答案 0 :(得分:2)
'^' expression '.*\'
靠近末尾的\
会使\n
被解释为换行符:
SMCSx0.*\noSat48VTFeLeakTrace.*\.txt$
这适用于其他滤镜,因为NoSat48VTrace
的大写N
和\N
被解释为N
。
摆脱\
,你不需要它。
答案 1 :(得分:1)
你有一个额外的反斜杠:
regs = regexp(filenames, ['^' expression '.*\' filterword '.*\.txt$'])
^^^
|||
删除它,它应该给出预期的结果。