【问题标题】:Check if string contains any numbers in MATLAB检查字符串是否包含MATLAB中的任何数字
【发布时间】:2020-03-17 15:05:12
【问题描述】:

我们如何检查字符串是否包含任何数字?

检查字符串是否包含所有字母的最佳方法是使用isletter 命令,但如何更进一步检查字符串中的任何字符是否为数字?

一种方法是将字符串转换为字符数组并交叉检查 ascii 值是否属于数字。在 MATLAB 中有没有更简单的方法来做到这一点?

示例字符串:67 Cliston St

【问题讨论】:

  • 简称TF = isstrprop(str,'digit')
  • @marsei 我刚刚学到了一些新东西!我认为您应该发布作为答案。

标签: string matlab character numeric


【解决方案1】:
>> exampleString = "67 Cliston St";
>> any(regexp(exampleString ,'[0-9]'))

如果字符串中至少有一个数字,则返回 true。

【讨论】:

    【解决方案2】:

    这绝不是最好的方法(我相信其他人会有更优雅的解决方案)。但这似乎有效。

    方法:
    1. 使用split拆分字符串。
    2. 用strtrim从字符串中去除空格。
    3. 使用str2numisemptyisnumeric 来检查数字。

    str = '67 Cliston St'
    newStr = strtrim(split(str))
    
    idxNum = false(length(newStr),1);
    for k =1:length(newStr)
        if ~isempty(str2num(newStr{k}))
            idxNum(k) = isnumeric(str2num(newStr{k}))
        end
    end
    NumPresent = any(idxNum,true);    % returns true if any numerics in the str
    

    正如我所说,它并不漂亮。其他答案更胜一筹。对于'67Cliston St',这将失败,除非您将字符串分解为每个字符,例如

    newStr = strtrim(split(str,""))
    

    这对'67Cliston St' 很有效。


    计算性能:
    将此答案与其他答案进行比较:

    • isstrprop(str,'digit') (source)
    • any(regexp(exampleString ,'[0-9]')) (source)

    表明随着字符串长度的增加,isstrprop(str,'digit') 的速度要快得多。

    【讨论】:

      猜你喜欢
      • 2015-09-08
      • 2012-11-15
      • 2020-12-01
      • 2012-04-30
      • 2013-12-04
      • 2015-02-28
      • 2013-11-20
      相关资源
      最近更新 更多