regexp可以返回结构中的键/值对吗?

时间:2017-09-21 02:51:58

标签: regex matlab token key-value matlab-struct

我们说我有一个带键/值对的字符数组:

regexp

这只是一个样本。实际数据在文件中并且有很多对。我可以使用lns = regexp(ch, '(\w*):\s(.*?)\n', 'tokens'); for i = 1:numel(lns) myStruct.(lns{i}{1}) = lns{i}{2}; end myStruct = struct with fields: name: 'John' sex: 'M' 获取令牌,然后使用for循环将它们分配给结构:

regexp(ch, expr, 'names')

有没有更简单的方法来实现这一点,例如使用{{1}}?

1 个答案:

答案 0 :(得分:5)

您可以通过将键/值对收集到单个单元格数组中,然后将其内容作为comma-separated list传递给struct来避免for循环:

args = [lns{:}];
myStruct = struct(args{:});

输出:

myStruct = 

  struct with fields:

    name: 'John'
     sex: 'M'

或者,您可以避免使用regexp并使用textscan从文件中读取,这可能会提高效果:

strs = textscan(fileID, '%s', 'Delimiter', ':');
myStruct = struct(strs{1}{:});