MATLAB Answers

Translated by

このページのコンテンツは英語から自動翻訳されています。自動翻訳をオフにする場合は「<a class="turn_off_mt" href="#">ここ</a>」をクリックしてください。

KAE
0

Find cell containing part of a string

KAE
さんによって質問されました 2017 年 10 月 26 日
最新アクティビティ KAE
さんによって コメントされました 2017 年 10 月 27 日
I would like to find the elements of a cell array that contain part of a specified string.
colorList = {'Red', 'Green', 'Blue', 'Purple'}; % List of values to match with
stringToCheck = 'Blue 23948723'; % String we are trying to match
I would like to return index=3 of colorList since that entry contains the stringToCheck text of 'Blue'. How can I do this?

  0 件のコメント

サインイン to comment.

タグ

3 件の回答

回答者: Cedric Wannaz
2017 年 10 月 26 日
編集済み: Cedric Wannaz
2017 年 10 月 26 日
 採用された回答

If you cannot assume that keywords are separated by white spaces:
>> find(cellfun(@(x)~isempty(strfind(stringToCheck,x)), colorList))
ans =
3

  2 件のコメント

KAE
2017 年 10 月 26 日
They may not be, I hadn't thought of that so thanks.
Cedric Wannaz
2017 年 10 月 26 日
My pleasure!

サインイン to comment.


回答者: per isakson
2017 年 10 月 26 日
編集済み: per isakson
2017 年 10 月 26 日

>> find( ismember( colorList, strsplit( stringToCheck ) ) )
ans =
3
or
>> find( ismember( colorList, strsplit( stringToCheck, {'\s','\.',','} ...
, 'CollapseDelimiters',true, 'DelimiterType','RegularExpression' ) ) )
ans =
3
if the color name is followed by a period or comma, e.g. "Blue.". And what about upper and lower case, e.g "blue"? And "Bluetooth"?

  1 件のコメント

KAE
2017 年 10 月 26 日
Thank you, this works and your scenarios are useful too.

サインイン to comment.


回答者: Akira Agata
2017 年 10 月 26 日

If your MATLAB is R2016b or later version, you can use contains function, like:
idx = cellfun(@(x) contains(stringToCheck,x),colorList);
The answer is:
>> colorList(idx)
ans =
{'Blue'}

  1 件のコメント

KAE
2017 年 10 月 27 日
Thank you, this syntax is easier to read and thus remember than then other ones.

サインイン to comment.



Translated by