结构中可以正则表达式 return key/value 对吗?
Can regexp return key/value pairs in a structure?
假设我有一个包含 key/value 对的字符数组:
ch = sprintf('name: John\nsex: M\n')
ch =
'name: John
sex: M
'
这只是一个示例。实际数据在一个文件中并且有很多对。我可以使用 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'
是否有更简单的方法来实现此目的,例如使用 regexp(ch, expr, 'names')
?
您可以通过将 key/value 对收集到单个元胞数组中然后将其内容作为 comma-separated list to struct
:
传递来避免 for 循环
args = [lns{:}];
myStruct = struct(args{:});
并且输出:
myStruct =
struct with fields:
name: 'John'
sex: 'M'
或者,您可以避免使用 regexp
and use textscan
从文件中读取,这可能会提高性能:
strs = textscan(fileID, '%s', 'Delimiter', ':');
myStruct = struct(strs{1}{:});
假设我有一个包含 key/value 对的字符数组:
ch = sprintf('name: John\nsex: M\n')
ch =
'name: John
sex: M
'
这只是一个示例。实际数据在一个文件中并且有很多对。我可以使用 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'
是否有更简单的方法来实现此目的,例如使用 regexp(ch, expr, 'names')
?
您可以通过将 key/value 对收集到单个元胞数组中然后将其内容作为 comma-separated list to struct
:
args = [lns{:}];
myStruct = struct(args{:});
并且输出:
myStruct =
struct with fields:
name: 'John'
sex: 'M'
或者,您可以避免使用 regexp
and use textscan
从文件中读取,这可能会提高性能:
strs = textscan(fileID, '%s', 'Delimiter', ':');
myStruct = struct(strs{1}{:});