包含多个模式中每个模式的单独结果



Matlab关于函数的文档TF = contains(str,pattern)指出:

如果 pattern 是一个包含多个模式的数组,则如果它在 str 中找到任何模式元素,则包含返回 1。

但是,我想要每个模式单独的结果。那是:

我有字符串A='a very long string'和两种模式B='very'C='long'。我想检查B是否包含在A中,以及C是否包含在A中。我可以这样做:

result = false(2,1);
result(1) = contains(A,B);
result(2) = contains(A,C);

但对于许多模式来说,这需要相当长的时间。做到这一点的快速方法是什么?

我不知道

或无法访问该功能;它必须是"新的",所以我不知道它的特殊特性。

我会怎么做:

result = ~cellfun('isempty', regexp(A, {B C}));

艾迪特

从文档来看,您可以使用contains做完全相同的事情:

result = contains(A, {B C});

除了这似乎返回contains(A,B) || contains(A,C)而不是数组[contains(A,B) contains(A,C)]。所以我不知道,我不能在这里测试它。但是,如果所有其他方法都失败了,您可以使用上面的regex解决方案。

16b 中的新文本处理函数是最快的字符串。如果将 A 转换为字符串,您可能会看到更好的性能。

function profFunc
    n = 1E6;
    A = 'a very long string';
    B = 'very';
    C = 'long';
    tic;
    for i = 1:n
        result(1) = contains(A,B);
        result(2) = contains(A,C);
    end
    toc;
    tic;
    for i = 1:n
        x = regexp(A, {B,C});
    end
    toc;
    A = string(A);
    tic;
    for i = 1:n
        result(1) = contains(A,B);
        result(2) = contains(A,C);
    end
    toc;
end
>> profFunc
Elapsed time is 7.035145 seconds.
Elapsed time is 9.494433 seconds.
Elapsed time is 0.930393 seconds.

问题:B和C从何而来?你有很多硬编码变量吗?你能循环吗?循环可能是最快的。否则类似

cellfun(@(x)contains(A,x),{B C}) 

是一种选择。

相关内容

最新更新