Matlab regexp标记 - 可选标记和返回数组的大小

时间:2017-07-17 14:47:22

标签: regex matlab token

假设我们有一组名称可以是myfilename_ABC(类型1)或myfilename_ABC=XYZ(类型2)的文件。假设在任何时候我们向regexp提供只有这两种类型之一的文件名数组,如何让它返回一个数组,其中包含1(对于类型1)或2(对于类型2)包含3个字母组合的列?我尝试过使用

'myfilename_(\w+)=?(\w+)?'

但是这会返回一个包含2列的单元格数组,即使是类型1文件名,其中第二列包含空字符串''

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