2012-02-24 9 views
5

MATLABのセル配列に部分文字列が含まれる場所を探しています。以下のコードは動作しますが、かなり醜いです。それは私には簡単な解決策があるはずです。MATLABは文字列サブセットのセル配列を検索します

cellArray = [{'these'} 'are' 'some' 'nicewords' 'and' 'some' 'morewords']; 
wordPlaces = cellfun(@length,strfind(cellArray,'words')); 
wordPlaces = find(wordPlaces); % Word places is the locations. 
cellArray(wordPlaces); 

これはに似ていますが、thisthisと同じではありません。

答えて

7

これは機能としてカプセル化することです。どちらのインライン:

substrmatch = @(x,y) ~cellfun(@isempty,strfind(y,x)) 

findmatching = @(x,y) y(substrmatch(x,y)) 

または2メートル、ファイルに含ま:

function idx = substrmatch(word,cellarray) 
    idx = ~cellfun(@isempty,strfind(word,cellarray)) 

ので

function newcell = findmatching(word,oldcell) 
    newcell = oldcell(substrmatch(word,oldcell)) 

は今、あなただけの

>> findmatching('words',cellArray) 
ans = 
    'nicewords' 'morewords' 
+0

乾杯を次のように彼らに'words'との言葉が含まれていcellArrayから細胞を抽出するための一つの方法です!それはうまくいきますが、私はそこに関数を組み込むことを望んでいました。少なくとも、これをより少ないステップで実行する方法でした。誰かが何か素晴らしいものを思いついたら、私はこれを数時間で解決策にします。 – dgmp88

+0

私が知る限り、組み込み関数はありません。私は同じ問題を自分でしばらくしていましたが、私が望むような組み込みを見つけることができなかったので、これらのコードスニペットを書くことになりました。 –

+0

十分です。私はこれと一緒に行くでしょう - 歓声! – dgmp88

4

私がいない入力することができますあなたがそれを考慮するかどうかを知るはより簡単なソリューションですが、regular expressionsは文字列の検索によく使う汎用ユーティリティです。

>> matches = regexp(cellArray,'^.*words.*$','match'); %# Extract the matches 
>> matches = [matches{:}]        %# Remove empty cells 

matches = 

    'nicewords' 'morewords' 
+0

優れた解決策ですが、私は正規表現が恐ろしいです。これはコード行が少なくなっていますが、私は正規表現を避ける方が正しいとマークしました。申し訳ありませんが、これは正しいというよりは単純なので、少し不公平だと感じています。 – dgmp88

+0

@ dgmp88:私は完全に理解しています。正規表現には慣れているものもありますが、一度あなたが[あなたはスーパーヒーローのように感じます](http://xkcd.com/208/)。 ;) – gnovice