我有一串变量名称,如下所示:
{'"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'}
答案 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'