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

Xia*_* Li 4 regex matlab token key-value matlab-struct

假设我有一个带键/值对的字符数组:

ch = sprintf('name: John\nsex: M\n')
ch =
    'name: John
     sex: M
     '
Run Code Online (Sandbox Code Playgroud)

这只是一个样本.实际数据在文件中并且有很多对.我可以使用regexp获取令牌,然后使用for循环将它们分配给结构:

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'
Run Code Online (Sandbox Code Playgroud)

是否有更简单的方法来实现这一点,比如使用regexp(ch, expr, 'names')

gno*_*ice 5

您可以通过将键/值对收集到单个单元格数组中,然后将其内容作为逗号分隔列表传递给struct:来避免for循环:

args = [lns{:}];
myStruct = struct(args{:});
Run Code Online (Sandbox Code Playgroud)

并输出:

myStruct = 

  struct with fields:

    name: 'John'
     sex: 'M'
Run Code Online (Sandbox Code Playgroud)

或者,您可以避免使用regexp和使用textscan从文件中读取,这可以提高性能:

strs = textscan(fileID, '%s', 'Delimiter', ':');
myStruct = struct(strs{1}{:});
Run Code Online (Sandbox Code Playgroud)