Matlab 正则表达式令牌 - 返回数组的可选令牌和大小



假设我们有一组文件,其名称可以是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'选项(每个输入仅匹配一次表达式(来删除额外的单元格封装层。

最新更新