检查字符串是否包含 MATLAB 中的任何数字

Check if string contains any numbers in MATLAB

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

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

一种方法是将字符串转换为字符数组,然后交叉检查 ascii 值是否属于数字。在 MATLAB 中有更简单的方法吗?

示例字符串:67 Cliston St

>> exampleString = "67 Cliston St";
>> any(regexp(exampleString ,'[0-9]'))

如果字符串中至少有一个数字,则 return 为真。

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

方法:
1. 使用 split.
拆分字符串 2. Trim 字符串中的空格 strtrim.
3. 使用 str2num, isempty, & isnumeric 检查数字。

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') ()
  • any(regexp(exampleString ,'[0-9]')) ()

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