Find multiple strings within another string
35 次查看(过去 30 天)
显示 更早的评论
I am trying to find the indexes in a struct 'data.orig_reg' where the corresponding strings I am trying to find is 'a_13'. The following code works just fine.
CVT_PAT = find(~cellfun('isempty',strfind({data.orig_reg},'a_13')))';
[sharedCVTVals,~] = intersect(CVT,CVT_PAT);
If I implement multiple string searches such as:
TEST = {'a_13','a_14','a_164'}.
CVT_PAT = find(~cellfun('isempty',strfind({data.orig_reg},TEST)))';
[sharedCVTVals,~] = intersect(CVT,CVT_PAT);
This returns an error:
Error using strfind
PATTERN must be a string scalar or character vector.
This is due to strfind only takes in one string at the time as faar as I can tell... Is there a way to make this code work by using multiple strings as an input like the variable TEST described above?
0 个评论
采纳的回答
Stephen23
2017-4-20
编辑:Stephen23
2017-4-20
One solution: wrap it all up in another cellfun:
>> C = {'A','B','xxxa_13x','xxa_14x','C','a_13'};
>> TEST = {'a_13','a_14','a_164'};
>> out = cellfun(@(s)find(~cellfun('isempty',strfind(C,s))),TEST,'uni',0);
>> out{:}
ans =
3 6
ans = 4
ans = []
Note that you did not specify how you want the output: do you want to be able to distinguish which string was matched, or which pattern was matched, or both, or neither (e.g. a simple count of how many matches were made). Each of these could be coded differently.
更多回答(1 个)
Tao Wang
2022-1-13
mystr={'123a1','ab','111'};
pat = ("a"|"b");
a = strfind(mystr,pat)
% can get index of each match
ab = contains(mystr,pat)
% logical result
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Characters and Strings 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!