Find multiple strings within another string
17 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Daniel Eidsvåg
le 20 Avr 2017
Réponse apportée : Tao Wang
le 13 Jan 2022
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 commentaires
Réponse acceptée
Stephen23
le 20 Avr 2017
Modifié(e) : Stephen23
le 20 Avr 2017
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.
Plus de réponses (1)
Tao Wang
le 13 Jan 2022
mystr={'123a1','ab','111'};
pat = ("a"|"b");
a = strfind(mystr,pat)
% can get index of each match
ab = contains(mystr,pat)
% logical result
0 commentaires
Voir également
Catégories
En savoir plus sur Cell Arrays dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!