Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当变量带有下划线时,在Matlab中使用regexp进行解析_Regex_Matlab - Fatal编程技术网

当变量带有下划线时,在Matlab中使用regexp进行解析

当变量带有下划线时,在Matlab中使用regexp进行解析,regex,matlab,Regex,Matlab,我有一个如下形式的字符单元格数组: ... \"_date\":\"1462455000\",\"_amount\":\"0.57\",\"_amount_currency\":\"USD\",\"_payable_date\":\"1463059800\" ... 我尝试使用以下表达式解析这些值: dates = regexp(rawDividends, '(?<="_date\\":\\")[0-9.]*?(?=\\)', 'match', 'once'); amounts =

我有一个如下形式的字符
单元格数组

...  
\"_date\":\"1462455000\",\"_amount\":\"0.57\",\"_amount_currency\":\"USD\",\"_payable_date\":\"1463059800\"
...
我尝试使用以下表达式解析这些值:

dates = regexp(rawDividends, '(?<="_date\\":\\")[0-9.]*?(?=\\)', 'match', 'once');
amounts = regexp(rawDividends, '(?<=amount\\":\\")[0-9.]*?(?=\\)', 'match', 'once');

dcurrency = regexp(rawDividends, '(?<=_amount_currency\\":\\")[0-9.]*?(?=\\)', 'match', 'once');
dpayabledate = regexp(rawDividends, '(?<=_payable_date\\":\\")[0-9.]*?(?=\\)', 'match', 'once');

dates=regexp(raw),(?我怀疑这是因为您的正则表达式正在寻找
[0-9.]*
而不是
[A-Z]*

dcurrency = regexp(rawDividends, '(?<=_amount_currency\\":\\")[A-Z]*?(?=\\)', 'match', 'once');

dcurrency=regexp(rawdirements),(?您可能会从16b中引入的extractBetween中受益

dates = extractBetween(rawDividends,'_date\":\"','\');
amounts = extractBetween(rawDividends,'_amount\":\"','\');
它可能更快。它肯定比regexp容易一点

编辑:做了一些性能分析,因为我很好奇

function profFunc

    rawDividends = '\"_date\":\"1462455000\",\"_amount\":\"0.57\",\"_amount_currency\":\"USD\",\"_payable_date\":\"1463059800\"';
    rawDividends = repmat({rawDividends},1000,1);

    n = 1E3;

    tic
    for i = 1:n
       dates = regexp(rawDividends, '(?<="_date\\":\\")[0-9.]*?(?=\\)', 'match', 'once'); 
    end
    toc

    tic
    for i = 1:n
        dates = extractBetween(rawDividends,'"_date\":\"','\');
    end
    toc

    rawDividends = string(rawDividends);

    tic
    for i = 1:n
        dates = extractBetween(rawDividends,'"_date\":\"','\');
    end
    toc

end

>> profFunc
Elapsed time is 1.533854 seconds.
Elapsed time is 0.710215 seconds.
Elapsed time is 0.326965 seconds.
函数profFunc
未分配股息=“\”\“\”日期\“:\”1462455000\”,“\”金额\“:”0.57\”,“\”金额\货币\“:”美元\“,“\”应付日期\“:”1463059800\”;
rawdirements=repmat({rawdirements},1000,1);
n=1E3;
抽搐
对于i=1:n

dates=regexp(rawdirements),(?请参阅。此外,如何将
USD
[0-9.]
模式匹配?使用那些lookahead没有任何意义:使用贪婪的量词并删除所有lookahead。很棒的东西!谢谢