Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 使用strtok提取字符串的某些部分_Matlab - Fatal编程技术网

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应该在帮助文档的示例中添加更多细节。那会更好!那会更好!