我有一个'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'之前。如何以简洁的方式编写此类代码。
由于
编辑:
对不起家伙我应该用一个更好的例子。我现在纠正了。
答案 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时,你会得到一个需要为你的目的重新格式化的单元格单元格。