2013-07-17 85 views
1

我有絃樂,看起來像選擇性地刪除逗號和分割字符串

txt = '"EMB","iShares J,P. Morg",110.81,N/A' 

我使用strsplit(txt,',');打入基於逗號和單獨字符串這一點。但是我想忽略'J''P'之間的逗號,因爲它不是分隔符;它只是名字的一部分。

有沒有一種方法可以說「如果逗號是在兩個引號之間,但引號之間還有其他字符,請刪除逗號」?

+1

等待一個懂得正則表達式的人,我確定有。 –

+0

謝謝休!同時我會看看正則表達式。 – siegel

回答

1

是一個愚蠢的(但功能)答案:

inquotes=false; 
keep=true(1,length(txt)); 
for v=1:length(txt) 
    if (txt(v)=='"') 
     inquotes=~inquotes; 
    elseif (txt(v)==',' && inquotes) 
     keep(v)=false; 
    end 
end 
txt=txt(keep); 
tt=strsplit(txt,','); 

這意志,如果你是在引號,刪除逗號,這樣就可以使用strsplit。那是我理解你想要做的,對嗎?

+0

這就是我想要做的;出於某種原因,我得到了「索引超出矩陣尺寸」的錯誤。 – siegel

+0

看到編輯,有一個錯誤初始化'keep' –

+0

太棒了!有用。 – siegel

2

下面是一個等效regexp單行:

C = regexp(txt, '("[^"]*")|([^,"]+)', 'match') 

其結果是一個單元陣列與已分割的字符串。不幸的是,我沒有MATLAB R2013,所以我不能和strsplit進行比較。