假设我们有一组文件,其名称可以是myfilename_ABC
(类型 1(或myfilename_ABC=XYZ
(类型 2(。假设我们在任何时候都regexp
提供仅这两种类型之一的文件名数组,如何让它返回一个包含 1(对于类型 1(或 2(对于类型 2(列的数组包含 3 个字母的组合?我试过使用
'myfilename_(w+)=?(w+)?'
但这会返回一个包含 2 列的单元格数组,即使对于类型 1 文件名,其中第二列包含空字符串''
.
如果您只是为每个事例创建匹配表达式并使用条件运算符,则可以执行此操作。例如:
>> type1 = {'myfilename_ABC'; 'myfilename_DEF'};
>> type2 = {'myfilename_ABC=XYZ'; 'myfilename_DEF=UVW'};
>> matchExpr = 'myfilename_(w+)=(w+)|myfilename_(w+)';
>> results1 = regexp(type1, matchExpr, 'tokens', 'once')
results1 =
2×1 cell array
{1×1 cell} % Each cell contains 1-by-1 results
{1×1 cell}
>> results2 = regexp(type2, matchExpr, 'tokens', 'once')
results2 =
2×1 cell array
{1×2 cell} % Each cell contains 1-by-2 results
{1×2 cell}
请注意,我将较长的匹配表达式 (myfilename_(w+)=(w+)
( 放在较短的匹配表达式 (myfilename_(w+)
(之前,以便它首先尝试匹配较长的表达式。我还使用了'once'
选项(每个输入仅匹配一次表达式(来删除额外的单元格封装层。