【问题标题】:Cutting out Specific Strings in Matlab在 Matlab 中删除特定字符串
【发布时间】:2019-08-15 01:13:32
【问题描述】:

您好,我有一个名为 data2 的数据表,其值在 Matlab 中为 YNU

我想保留所有 Y 并删除所有内容。

我使用 strcmp 找到 N 并成功剪切了带有 'N' 的行。但是,我想摆脱UN。我尝试使用 |在 cmpstr 中表示 or ,但它不起作用。

rowIdx = strcmp('N' , data2{:, 1});
data2(rowIdx, :) = [];

即使有| 符号,也只去掉N

【问题讨论】:

    标签: matlab


    【解决方案1】:

    您可以分别搜索'N''U',然后对逻辑数组求和。由于第一列的元素不能同时是'N''U',因此您最终会得到一个数组,其中包含'N''U'0 的行将拥有1,否则.

    所以代码是:

    rowIdx_N = strcmp('N' , data2{:, 1});
    rowIdx_U = strcmp('U' , data2{:, 1});
    rowIdx = rowIdx_N|rowIdx_U;% Performs OR operation on logical array
    data2(rowIdx, :) = [];
    

    【讨论】:

    • 当我尝试这个时,他们说“表格行下标必须是包含实数正整数的数值数组、逻辑数组、字符向量、字符串数组或字符向量元胞数组。”
    • @MoanaLisa 我解决了问题rowIdx 不是逻辑数组,它现在应该可以工作了
    • 对!感谢您的帮助!
    • @MoanaLisa 很高兴为您提供帮助。如果此答案或任何其他答案解决了您的问题,请将其标记为已接受。
    【解决方案2】:

    您可以使用正则表达式并仅提取与指定模式匹配的行('y'在您的情况下)。这有一个很大的优势,即它更通用,可用于搜索任何模式。也不需要显式删除找到的匹配项。

    % test table, just for demo since you did not provide any data
    t = {'u', 'Y', 'h', 'f'; 'f', 'h', 'h', 'e'; 'g', 'd', 'y', 'n'};
    t = cell2table(t)
    
    pattern = 'y'; % any regular expression
    str = t{:, :};
    
    found = regexp(str, pattern) % or regexpi() for case insensitivity
    
    [r,c] = find(~cellfun(@isempty,found));
    t(unique(r),:) % matching rows of table t
    

    如果在一行中找到多个匹配项,则需要最后一行中的unique(),否则会导致该单行在输出中多次出现。

    【讨论】:

    • 您能否详细说明 [r,c] 部分?这是什么意思?
    • r 是我的行变量和c 列变量。 [r, c] = function(...),其中[r, c]位于赋值的左侧,表示该函数将返回2个值(在这种情况下为find())。另见mathworks.com/matlabcentral/answers/… 这将捕获found 中所有非空单元格的行和列索引(=匹配模式)。
    • 或查看mathworks.com/help/matlab/ref/function.html 以获取示例Function with multiple outputs
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    • 1970-01-01
    相关资源
    最近更新 更多