Matlab 使用strtok提取字符串的某些部分
我试图使用Matlab 使用strtok提取字符串的某些部分,matlab,Matlab,我试图使用strtok()提取字符串的一部分,但无法获得完整的输出 输入: string = '3_5_2_spd_20kmin_corrected_1_20190326.txt'; 输出: >> strtok(string) ans = '3_5_2_spd_20kmin_corrected_1_20190326.txt' >> strtok(string,'.txt') ans = '3_5_2_spd_20kmin
strtok()
提取字符串的一部分,但无法获得完整的输出
输入:
string = '3_5_2_spd_20kmin_corrected_1_20190326.txt';
输出:
>> strtok(string)
ans =
'3_5_2_spd_20kmin_corrected_1_20190326.txt'
>> strtok(string,'.txt')
ans =
'3_5_2_spd_20kmin_correc'
>> strtok(string,'0326')
ans =
'_5_'
>> strtok(string,'2019')
ans =
'3_5_'
>> strtok(string,'.txt')
ans =
'3_5_2_spd_20kmin_correc'
我希望输出3\u 5\u 2\u spd\u 20kmin\u校正后的\u 1\u 20190326
,但实际输出是3\u 5\u 2\u spd\u 20kmin\u correc
。这是为什么?如何获得正确的输出?将第二个输入参数中的每个字符视为单独的分隔符
例如,呼叫时:strtok(“3\u 5\u 2\u spd\u 20kmin\u校正的\u 1\u 20190326.txt,'.txt')
Matlab将
、t
、x
视为单独的分隔符,因此在遇到第一个t
时分割输入,并返回结果3\u 5\u 2\u spd\u 20kmin\u correc
在使用'2019'
的另一个示例中,再次说明'2019'
不是单个分隔符而是分隔符,因为实际使用的分隔符都是'2'
,'0'
,'1'
,'9'
。因此,字符串中遇到的第一个分隔符(从左到右)是'2'
,就在'3_5'
之后。这就是为什么它返回'3\u 5'
为了达到您的预期输出,我认为您最好使用
相反:
将第二个输入参数内的每个字符视为单独的分隔符
例如,呼叫时:strtok(“3\u 5\u 2\u spd\u 20kmin\u校正的\u 1\u 20190326.txt,'.txt')
Matlab将
、t
、x
视为单独的分隔符,因此在遇到第一个t
时分割输入,并返回结果3\u 5\u 2\u spd\u 20kmin\u correc
在使用'2019'
的另一个示例中,再次说明'2019'
不是单个分隔符而是分隔符,因为实际使用的分隔符都是'2'
,'0'
,'1'
,'9'
。因此,字符串中遇到的第一个分隔符(从左到右)是'2'
,就在'3_5'
之后。这就是为什么它返回'3\u 5'
为了达到您的预期输出,我认为您最好使用
相反:
extractBefore执行您希望执行的操作:
>> string = '3_5_2_spd_20kmin_corrected_1_20190326.txt';
>> extractBefore(string,'.txt')
ans =
'3_5_2_spd_20kmin_corrected_1_20190326'
extractBefore执行您希望执行的操作:
>> string = '3_5_2_spd_20kmin_corrected_1_20190326.txt';
>> extractBefore(string,'.txt')
ans =
'3_5_2_spd_20kmin_corrected_1_20190326'
如果字符串是文件名/路径,并且目标是提取不带扩展名的文件名,那么最好的选择是使用,如下所示:
>> str = '3_5_2_spd_20kmin_corrected_1_20190326.txt';
>> [~, name] = fileparts(str)
name =
'3_5_2_spd_20kmin_corrected_1_20190326'
如果字符串是文件名/路径,并且目标是提取不带扩展名的文件名,那么最好的选择是使用,如下所示:
>> str = '3_5_2_spd_20kmin_corrected_1_20190326.txt';
>> [~, name] = fileparts(str)
name =
'3_5_2_spd_20kmin_corrected_1_20190326'
谢谢!非常有帮助!不客气。如果它确实完全解决了您的问题,(单击答案旁边的勾号),但我仍然不明白为什么我设置了,例如,“2019”作为分隔符,结果只有“3_5_”?它不会受到重复字母的限制,对吗?关键是“2019”不是单个分隔符,而是分隔符,从这个意义上讲,实际使用的分隔符是“2”、“0”、“1”、“9”。输入时,它在字符串中遇到的第一个分隔符(从左到右)是“2”,位于“3_5_”之后。这就是它返回“3_5_”的原因。问题终于解决了!也许matlab应该在帮助文档的示例中添加更多细节。非常感谢!非常有帮助!不客气。如果它确实完全解决了您的问题,(单击答案旁边的勾号),但我仍然不明白为什么我设置了,例如,“2019”作为分隔符,结果只有“3_5_”?它不会受到重复字母的限制,对吗?关键是“2019”不是单个分隔符,而是分隔符,从这个意义上讲,实际使用的分隔符是“2”、“0”、“1”、“9”。输入时,它在字符串中遇到的第一个分隔符(从左到右)是“2”,位于“3_5_”之后。这就是它返回“3_5_”的原因。问题终于解决了!也许matlab应该在帮助文档的示例中添加更多细节。那会更好!那会更好!