Matlab strsplit的空格和引号

时间:2016-10-05 20:33:37

标签: matlab

我有一串变量名称,如下所示:

{'"NORM TIME   SEC, SEC, 9999997" "ROD FORCE, LBS, 3000118" "ROD   POS, DEG, 3000216" P_ext_chamber_press P_ret_chamber_press "GEAR#1 POS INCH" 388821 Q_valve_gpm P_return 3882992 "COMMAND VOLTAGE VOLT"'}

双引号用于在单词"之间带空格或特殊字符的变量名称。并且单个单词变量在它们周围没有任何引号。变量由一个空格分隔。一些变量名只是数字。

最后,我想创建一个包含字符串的单元格,如下所示:

{'NORM_TIME_SEC_SEC_9999997','ROD_FORCE_LBF_3000118','ROD_POS_DEG_3000216','P_ext_chamber_press','P_ret_chamber_press','GEAR#1_POS_INCH','3388821','Q_valve_gpm','P_return','3882992','COMMAND_VOLTAGE_VOLT'}

3 个答案:

答案 0 :(得分:2)

您可以使用regexp首先将其拆分为多个组,然后将所有空格替换为_

data = {'"abc def ghi" "jkl mno pqr" "stu vwx" yz"'};

% Get each piece within the " " 
pieces = regexp(data{1}, '(?<=\"\s*)([A-Za-z0-9]+\s*)*(?=\"\s*)', 'match');

%   'abc def ghi'    'jkl mno pqr'


% Replace any space with _
names = regexprep(pieces, '\s+', '_');

%   'abc_def_ghi'    'jkl_mno_pqr'

更新

由于您的上一个变量未被引号括起,因此您可以执行以下操作

pieces = strtrim(regexp(data, '[^\"]+(?=\")', 'match'));
pieces = pieces{1};
pieces = pieces(~cellfun(@isempty, pieces));

% Replace spaces with _
regexprep(pieces, '\s+', '_')

答案 1 :(得分:1)

我最终强迫自己在正则表达式上学习一点点,以下内容似乎对我正在尝试做的事情很有效:

regexp(str,'(\"[\w\s\,\.\#]+\"|\w+)','match')

可能没有我想要的那么健壮,因为我只是专门挑出一组特殊字符,但到目前为止,我还没有看到除了数据集中的其他特殊字符。

答案 2 :(得分:0)

str = {'“abc def ghi”“jkl mno pqr”“stu vwx”yz“'};

然后

:after

结果单元格数组是str_q,它将给出变量的名称

str_q ='abc_def_ghi''jkl_mno_pqr''stu_vwx''yz'