Как мне разобрать строку в буквы, цифры и т. Д. В MATLAB? - PullRequest
2 голосов
/ 09 декабря 2010

У меня есть строка символов, таких как '12hjb42&34ni3&(*&' в MATLAB.

Я хочу отделить цифры и буквы и все остальное с помощью регулярных выражений или каким-либо другим более простым способом. Как я могу это сделать?

Ответы [ 2 ]

9 голосов
/ 09 декабря 2010

Вместо использования регулярных выражений, я думаю, было бы проще использовать функцию 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

, которая даст вам следующие результаты:

alphaStr = 'hjbni'
digitStr = '1242343'
otherStr = '&&(*&'

Если вы действительно хотели использовать REGEXP , вот как вы могли бы это сделать:

matches = regexp(str,{'[a-zA-Z]','\d','[^a-zA-Z\d]'},'match');
alphaStr = [matches{1}{:}];
digitStr = [matches{2}{:}];
otherStr = [matches{3}{:}];
0 голосов
/ 09 декабря 2010

Я не думаю, что регулярные выражения могут справиться с этим, если вы не знаете, сколько чисел / строк / других блоков у вас есть заранее. Например, в 'st34 *' есть 3 блока, поэтому это будет работать:

regexprep('st34*', '([A-Za-z]+|\d+|\W+)([A-Za-z]+|\d+|\W+)([A-Za-z]+|\d+|\W+)', ...
 '$1 $2 $3')

Если вы не знаете количество кусков, вы можете привести к int и bucket в свои 3 категории, а затем посмотреть, где категория меняется, чтобы найти точку останова.

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

Я не проверял это, но что-то вроде этого должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...