使用Matlab的sscanf从文本字符串中提取值

时间:2014-10-24 23:32:40

标签: arrays string matlab text

我有以下字符串:

str={"USD":{"last":352.49,"bid":352.49,"ask":353.6,
            "high":358.75,"low":349.34,"volume":6678.7783}.....

我想在像这样的列向量中提取值

colvector=[352.49,352.49,353.6,358.75,349.34,6678.7783]

我相信sscanf函数可用于提取所需的格式。我尝试了使用sscanf的不同变体,但我还没设法从字符串中提取值。

fmt=['{"USD":{"last": "%f", "bid": "%f", "ask": "%f",
              "high": "%f", "low": "%f", "volume": "%f"}...

例如colvector=sscanf(str,fmt)无效。

1 个答案:

答案 0 :(得分:0)

假设您有一个包含该文本的字符串变量,

s = 'str={"USD":{"last":352.49,"bid":352.49,"ask":353.6,"high":358.75,"low":349.34,"volume":6678.7783}.';

您可以应用正则表达式来隔离所需的字符串(由数字组成,后跟可选的小数点和数字)。为此,您使用带有'match'选项的regexp函数。这会产生一个字符串的单元格数组。然后,使用带有cellfunstr2num将每个字符串转换为数字。将所有内容组合成一行,

result = cellfun(@str2num, regexp(s, '\d+(\.\d+)?', 'match'));

对于示例字符串,这会产生:

result =

  1.0e+003 *

    0.3525    0.3525    0.3536    0.3588    0.3493    6.6788