正则表达式在Matlab中引用引号外的逗号

时间:2015-05-15 17:32:53

标签: regex matlab

我在Matlab(MacOSX)中使用regexp尝试了picking commas outside quotes的解决方案

str='"This string has comma , inside the quotes", 2nd string, 3rd string'

我期待三个代币

 "This string has comma , inside the quotes"
  2nd string
  3rd string

我使用了以下内容但获得了一个空解决方案

regexp(str, '\^([^"]|"[^"]*")*?(,)\')

ans =

     []

对于此,应该正确的regexp语法。

1 个答案:

答案 0 :(得分:3)

没有正则表达式

你可以

  1. 检测双引号外的逗号位置:它们是逗号,其左侧有一个偶数(可能为零)的双重标记数。
  2. 在这些点拆分字符串。
  3. 删除除最后一个子串之外的逗号。
  4. 代码:

    使用正则表达式

    以逗号分隔,前面是偶数(可能为零)的双引号:

    pos = find(~mod(cumsum(str=='"'),2)&str==',');                                   %// step 1
    result = mat2cell(str, 1, diff([0 pos numel(str)]));                             %// step 2
    result(1:end-1) = cellfun(@(x) x(1:end-1), result(1:end-1), 'uniformoutput', 0); %// step 3