J'ai une chaîne de caractères comme ceci '12hjb42&34ni3&(*&'
dans MATLAB. Je veux séparer les chiffres et les lettres et tout le reste par regex ou d'une autre manière plus facile. Comment puis-je faire ceci?Comment puis-je analyser une chaîne en lettres, chiffres, etc. dans MATLAB?
2
A
Répondre
9
Au lieu d'utiliser des expressions régulières, je pense qu'il serait plus facile d'utiliser la fonction ISSTRPROP:
str = '12hjb42&34ni3&(*&'; %# Your sample string
alphaStr = str(isstrprop(str,'alpha')); %# Get the alphabetic characters
digitStr = str(isstrprop(str,'digit')); %# Get the numeric characters
otherStr = str(~isstrprop(str,'alphanum')); %# Get everything that isn't an
%# alphanumeric character
qui vous donne ces résultats:
alphaStr = 'hjbni'
digitStr = '1242343'
otherStr = '&&(*&'
Si vous vraiment voulu à utilisez REGEXP, voici comment vous pourriez le faire:
matches = regexp(str,{'[a-zA-Z]','\d','[^a-zA-Z\d]'},'match');
alphaStr = [matches{1}{:}];
digitStr = [matches{2}{:}];
otherStr = [matches{3}{:}];
0
Je ne pense pas que regex puisse gérer cela à moins que vous ne connaissiez le nombre de blocs nombre/chaîne/autre que vous avez à l'avance. Par exemple, dans « ST34 * » il y a 3 morceaux, donc cela pourrait fonctionner:
regexprep('st34*', '([A-Za-z]+|\d+|\W+)([A-Za-z]+|\d+|\W+)([A-Za-z]+|\d+|\W+)', ...
'$1 $2 $3')
Si vous ne connaissez pas le nombre de morceaux, vous pouvez jeter int et seau dans vos 3 catégories, puis voir où la catégorie change pour trouver votre point de rupture.
n = int32('st34a');
idx = zeros(size(n));
idx(ismember(n, int32('0'):int32('9'))) = 1;
idx(ismember(n, int32('a'):int32('z'))) = 2;
idx(ismember(n, int32('A'):int32('Z'))) = 2;
idx = diff(idx) ~= 0; % these are the breakpoints where your string changes type
Je n'ai pas testé cela, mais quelque chose comme ça devrait fonctionner.
Pouvez-vous clarifier - voulez-vous séparer chaque séquence qui est tout-alphanumérique ou tout-non-alphanumérique? Ou voulez-vous tirer tous les alphanumériques à une chaîne et les non-alphanumériques à un autre? Vouliez-vous que les «chiffres et lettres» et «tout le reste» soient deux groupes, ou «chiffres», «lettres» et «tout le reste» en trois groupes? –