Find multiple strings within another string
35 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Daniel Eidsvåg
el 20 de Abr. de 2017
Respondida: Tao Wang
el 13 de En. de 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 comentarios
Respuesta aceptada
Stephen23
el 20 de Abr. de 2017
Editada: Stephen23
el 20 de Abr. de 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.
Más respuestas (1)
Tao Wang
el 13 de En. de 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 comentarios
Ver también
Categorías
Más información sobre Characters and Strings en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!