Matlab从单元格数组中提取子字符串

时间:2013-09-23 22:59:39

标签: regex matlab

我有一个'3 x 1'单元格数组,其内容如下所示:

'ASDF_LE_NEWYORK Fixedafdfgd_ML'
'Majo_LE_WASHINGTON FixedMonuts_ML'
'Array_LE_dfgrt_fdhyuj_BERLIN Potato Price'

我希望能够优雅地提取和创建另一个'3x1'单元格数组,内容为:

'NEWYORK'
'WASHINGTON'
'BERLIN'

如果你在上面注意到NAME是在最后一个下划线之后,在第一个SPACE或'_ML'之前。如何以简洁的方式编写此类代码。

由于

编辑:

对不起家伙我应该用一个更好的例子。我现在纠正了。

2 个答案:

答案 0 :(得分:2)

您可以对_使用lookbehind并寻找空间:

names = regexp(A, '(?<=_)[^\s_]*(?=\s)', 'match', 'once');

其中A是包含字符串的单元格数组:

A = {...
'ASDF_LE_NEWYORK Fixedafdfgd_ML'
'Majo_LE_WASHINGTON FixedMonuts_ML'
'Array_LE_dfgrt_fdhyuj_BERLIN Potato Price'};

>> names = regexp(A, '(?<=_)[^\s_]*(?=\s)', 'match', 'once')
names = 
    'NEWYORK'
    'WASHINGTON'
    'BERLIN'

答案 1 :(得分:1)

注意:问题已更改,因此答案已不再完整,但希望regexp示例仍然有用。

请尝试regexp,如下所示:

names = regexp(fullNamesCell,'_(NAME\d?)\s','tokens');
names = cellfun(@(x)(x{1}),names)

在模式_(NAME\d?)\s中,括号定义一个子表达式,它将作为标记(匹配文本的一部分)返回。 \d?指定零个或一个数字,但如果您希望介于1到3位数之间,则可以将\d{1}用于一个数字或\d{1,3}\s指定的空格。

names的重组有点复杂,但是当你使用带有单元格输入和tokens的regexp时,你会得到一个需要为你的目的重新格式化的单元格单元格。