假设我们有一组名称可以是myfilename_ABC
(类型1)或myfilename_ABC=XYZ
(类型2)的文件。假设在任何时候我们向regexp
提供只有这两种类型之一的文件名数组,如何让它返回一个数组,其中包含1(对于类型1)或2(对于类型2)包含3个字母组合的列?我尝试过使用
'myfilename_(\w+)=?(\w+)?'
但是这会返回一个包含2列的单元格数组,即使是类型1文件名,其中第二列包含空字符串''
。
答案 0 :(得分:1)
如果您只为每个案例创建匹配表达式并使用conditional operator,则可以执行此操作。例如:
>> 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'
option(每个输入只匹配一次表达式)到remove an extra layer of cell encapsulation。