Matlab中字符串格式的检查

Matlab中字符串格式的检查,matlab,Matlab,所以我在Matlab中阅读多个文本文件,在它们的第一列中有一列“times”。这些时间的格式为“MM:SS.millizes”(抱歉,如果这不是正确的表达方式),例如字符串“29:59.9”将是(29*60)+(59)+(59)+(9)=1799.9秒,或者是直接的秒.millizes格式,其中“29.9”表示29.9秒。单个文件的格式相同,但不同文件的格式不同。因为我希望时间是第二种格式,所以我想检查字符串的格式是否与第一种格式匹配。如果不匹配,则转换它,否则,继续。下面的代码是我要转换的代码

所以我在Matlab中阅读多个文本文件,在它们的第一列中有一列“times”。这些时间的格式为“MM:SS.millizes”(抱歉,如果这不是正确的表达方式),例如字符串“29:59.9”将是(29*60)+(59)+(59)+(9)=1799.9秒,或者是直接的秒.millizes格式,其中“29.9”表示29.9秒。单个文件的格式相同,但不同文件的格式不同。因为我希望时间是第二种格式,所以我想检查字符串的格式是否与第一种格式匹配。如果不匹配,则转换它,否则,继续。下面的代码是我要转换的代码,所以我的问题是如何检查字符串的格式?换句话说,我需要if语句的一些条件来检查格式是否错误

 %% Modify the textdata to convert time to seconds
    timearray = textdata(2:end, 1);
    if (timearray(1, 1) %{has format 'MM.SS.millisecond}%)
        datev = datevec(timearray);
        newtime = (datev(:, 5)*60) + (datev(:, 6));

    elseif(timearray(1, 1) %{has format 'SS.millisecond}%)
        newtime = timearray; 
你可以用它来帮助你。正则表达式是指定如何在字符串中搜索特定模式的方法。因此,您需要查找字符串是否遵循以下格式之一:

xx:xx.x
或:

其中每一个的正则表达式语法定义如下:

  • ^[0-9]+:[0-9]+\[0-9]+
  • ^[0-9]+\[0-9]+
  • 让我们一步一步地了解每种方法的工作原理

    • 对于第一个,
      ^[0-9]+
      表示字符串应该以任何数字(
      ^[0-9]
      )开头,而
      +
      表示应该至少有一个数字。因此,1,2。。。10, ... 20, ... etc.是此开头的有效语法。数字后面应以一个
      分隔,后跟至少一个或多个数字的另一序列。之后,有一个分隔它们的
      ,然后是另一个数字序列。注意我是如何使用
      \.
      来指定
      字符的。单独使用
      意味着字符是通配符。这显然不是您想要的,因此如果您想要指定实际的
      字符,您需要在
      前面加一个
      \

    • 对于第二个,它几乎与第一个相同。但是,没有
      分隔符,我们只有
      可以使用

    要调用正则表达式,请使用MATLAB中的命令。这是通过以下方式完成的:

    ind = regexp(str, expression);
    
    str
    表示要检查的字符串,表达式是我们上面讨论过的正则表达式。您需要确保使用单引号封装表达式。正则表达式作为字符串接收
    ind
    将返回找到匹配项的字符串的起始索引。因此,当我们搜索特定格式时,
    ind
    应该是1,表示我们在字符串的开头找到了该搜索,或者如果没有找到匹配项,它将返回空的
    []
    )。这里有一个可复制的示例:

    B = {'29:59.9', '29.9', '45:56.8', '24.5'};
    
    for k = 1 : numel(B)
        if (regexp(B{k}, '^[0-9]+:[0-9]+\.[0-9]+') == 1)
            disp('I''m the first case!');
        elseif (regexp(B{k}, '^[0-9]+\.[0-9]+') == 1) 
            disp('I''m the second case!');
        end
    end
    
    因此,代码应该打印出来
    我是第一个案例如果它遵循第一个案例的格式,它应该打印
    我就是第二个案例如果它遵循第二种情况的格式。因此,通过运行此代码,我们可以得到:

    I'm the first case!
    I'm the second case!
    I'm the first case!
    I'm the second case!
    
    如果不知道字符串的格式,我无法为您完成其余部分,但这对您来说应该是一个好的开始。

    您可以使用它来帮助您。正则表达式是指定如何在字符串中搜索特定模式的方法。因此,您需要查找字符串是否遵循以下格式之一:

    xx:xx.x
    
    或:

    其中每一个的正则表达式语法定义如下:

  • ^[0-9]+:[0-9]+\[0-9]+
  • ^[0-9]+\[0-9]+
  • 让我们一步一步地了解每种方法的工作原理

    • 对于第一个,
      ^[0-9]+
      表示字符串应该以任何数字(
      ^[0-9]
      )开头,而
      +
      表示应该至少有一个数字。因此,1,2。。。10, ... 20, ... etc.是此开头的有效语法。数字后面应以一个
      分隔,后跟至少一个或多个数字的另一序列。之后,有一个分隔它们的
      ,然后是另一个数字序列。注意我是如何使用
      \.
      来指定
      字符的。单独使用
      意味着字符是通配符。这显然不是您想要的,因此如果您想要指定实际的
      字符,您需要在
      前面加一个
      \

    • 对于第二个,它几乎与第一个相同。但是,没有
      分隔符,我们只有
      可以使用

    要调用正则表达式,请使用MATLAB中的命令。这是通过以下方式完成的:

    ind = regexp(str, expression);
    
    str
    表示要检查的字符串,表达式是我们上面讨论过的正则表达式。您需要确保使用单引号封装表达式。正则表达式作为字符串接收
    ind
    将返回找到匹配项的字符串的起始索引。因此,当我们搜索特定格式时,
    ind
    应该是1,表示我们在字符串的开头找到了该搜索,或者如果没有找到匹配项,它将返回空的
    []
    )。这里有一个可复制的示例:

    B = {'29:59.9', '29.9', '45:56.8', '24.5'};
    
    for k = 1 : numel(B)
        if (regexp(B{k}, '^[0-9]+:[0-9]+\.[0-9]+') == 1)
            disp('I''m the first case!');
        elseif (regexp(B{k}, '^[0-9]+\.[0-9]+') == 1) 
            disp('I''m the second case!');
        end
    end
    
    因此,代码应该打印出来
    我是第一个案例如果它遵循第一个案例的格式,它应该打印
    我就是第二个案例如果它遵循第二种情况的格式。像这样的