Regex 如何在MATLAB中将字符串解析为字母、数字等?

Regex 如何在MATLAB中将字符串解析为字母、数字等?,regex,matlab,string,Regex,Matlab,String,我在MATLAB中有一个字符串,如'12hjb42&34ni3&(*&') 我想通过正则表达式或其他更简单的方法来分隔数字、字母和其他所有内容。我如何做到这一点?我认为使用该函数比使用正则表达式更容易: 这将为您提供以下结果: alphaStr = 'hjbni' digitStr = '1242343' otherStr = '&&(*&' 如果您真的想使用,以下是您可以使用的方法: matches = regexp(str,{'[a-zA-Z]','\d','[^a

我在MATLAB中有一个字符串,如
'12hjb42&34ni3&(*&'


我想通过正则表达式或其他更简单的方法来分隔数字、字母和其他所有内容。我如何做到这一点?

我认为使用该函数比使用正则表达式更容易:

这将为您提供以下结果:

alphaStr = 'hjbni'
digitStr = '1242343'
otherStr = '&&(*&'
如果您真的想使用,以下是您可以使用的方法:

matches = regexp(str,{'[a-zA-Z]','\d','[^a-zA-Z\d]'},'match');
alphaStr = [matches{1}{:}];
digitStr = [matches{2}{:}];
otherStr = [matches{3}{:}];

我认为正则表达式无法处理这一问题,除非您提前知道有多少个number/string/else块。例如,在“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

我还没有测试过这个,但是类似的东西应该可以用。

你能澄清一下吗-你想把所有字母数字或非字母数字的序列分开吗?或者你想把所有字母数字拉到一个字符串上,把非字母数字拉到另一个字符串上吗?你想把“数字和字母”和“其他所有东西”分成两组,还是“数字”、“字母”和“其他一切”分为三组?
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