how to find a common part of the strings?
63 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
abdul kalam
il 11 Giu 2016
Modificato: Sindar
il 18 Lug 2018
Hi there!
Could you please help me how to find a common part of the strings?
for example: S1_carbon_avg_air, S1_carbon_err_air, S1_carbon_avg_arg, S1_carbon_err_arg, S1_carbon_avg_nit, S1_carbon_err_nit,
the coomon string is S1_carbon and i want to use this as legend and title of the graph as well.
Thank you in advance
Abdul kalam
0 Commenti
Risposta accettata
Walter Roberson
il 11 Giu 2016
If you have the strings in a cell array of strings, Scell, then
Schar = char(Scell(:));
all_rows_same = all(diff(Schar == 0, 1),1);
common_cols = find(~all_rows_same, 1, 'first');
if isempty(common_cols)
common_to_use = '?'
else
common_to_use = Scell{1}(1:common_cols);
end
This finds the longest leading substring common to all entries in the cell array and uses that; however if there is no leading substring that is common to all of them then it uses '?' just to have something .
6 Commenti
Matthias Brandt
il 6 Giu 2017
Modificato: Matthias Brandt
il 6 Giu 2017
a combination of both answers above gives an even simpler code: first we create the cell array that the first answer assumes with the help of the second:
s='S1_C2sum_avg_air, S1_C2sum_er_air, S1_C2sum_avg_arg,S1_C2sum_er_arg, S1_C2sum_avg_nit, S1_C2sum_er_nit';
Scell=strsplit(s,', ');
the extraction of the common part can then be written in one (even more intuitive) line:
common_to_use = Scell{1}(all(~diff(char(Scell(:)))))
the string we are after are "the characters that do not differ among all". Be aware, this code can produce false positive characters, if not only the first characters are equal through all the strings (as in the example).
Più risposte (2)
dpb
il 11 Giu 2016
The most trivial is that the part thru the second underscore is the same so use that fact...
ix=strfind(str,'_'); % the underscore locations in string 'str'
titleStr=str(1:ix(2)-1)); % the string up to that location
title(titleStr) % use it
2 Commenti
Image Analyst
il 11 Giu 2016
Is the "common" part always between underlines? Otherwise you could say that "r" is a common string since the character r is all over the place.
Gergö Schmidt
il 30 Mag 2017
If you have a uniform text/delimiter structure you could use the built-in strsplit and ismember functions like this:
Scell = {'S1_carbon_avg_air', 'S1_carbon_err_air', 'S1_carbon_avg_arg', 'S1_carbon_err_arg', 'S1_carbon_avg_nit', 'S1_carbon_err_nit'};
delimiter = '_';
commonparts = strsplit(Scell{1},delimiter);
for iS = 2:numel(Scell)
commonparts(~ismember(commonparts,strsplit(Scell{iS},delimiter))) = [];
end
commonparts = strjoin(commonparts,delimiter)
This will deliver:
commonparts =
S1_carbon
But in case of
Scell = {'S1_carbon_avg_air', 'S1_carbon_err_air'};
it gives
S1_carbon_air
which might be useful for some reason...
0 Commenti
Vedere anche
Categorie
Scopri di più su Characters and Strings in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!