Matlab中字符串格式的检查
所以我在Matlab中阅读多个文本文件,在它们的第一列中有一列“times”。这些时间的格式为“MM:SS.millizes”(抱歉,如果这不是正确的表达方式),例如字符串“29:59.9”将是(29*60)+(59)+(59)+(9)=1799.9秒,或者是直接的秒.millizes格式,其中“29.9”表示29.9秒。单个文件的格式相同,但不同文件的格式不同。因为我希望时间是第二种格式,所以我想检查字符串的格式是否与第一种格式匹配。如果不匹配,则转换它,否则,继续。下面的代码是我要转换的代码,所以我的问题是如何检查字符串的格式?换句话说,我需要if语句的一些条件来检查格式是否错误Matlab中字符串格式的检查,matlab,Matlab,所以我在Matlab中阅读多个文本文件,在它们的第一列中有一列“times”。这些时间的格式为“MM:SS.millizes”(抱歉,如果这不是正确的表达方式),例如字符串“29:59.9”将是(29*60)+(59)+(59)+(9)=1799.9秒,或者是直接的秒.millizes格式,其中“29.9”表示29.9秒。单个文件的格式相同,但不同文件的格式不同。因为我希望时间是第二种格式,所以我想检查字符串的格式是否与第一种格式匹配。如果不匹配,则转换它,否则,继续。下面的代码是我要转换的代码
%% 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.是此开头的有效语法。数字后面应以一个+
分隔,后跟至少一个或多个数字的另一序列。之后,有一个分隔它们的:
,然后是另一个数字序列。注意我是如何使用
来指定\.
字符的。单独使用
意味着字符是通配符。这显然不是您想要的,因此如果您想要指定实际的
字符,您需要在
前面加一个\
- 对于第二个,它几乎与第一个相同。但是,没有
分隔符,我们只有:
可以使用
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
因此,代码应该打印出来我是第一个案例代码>如果它遵循第一个案例的格式,它应该打印我就是第二个案例代码>如果它遵循第二种情况的格式。像这样的