0

我有一个像这样的 3x1 单元阵列:

name1 = text1
name2 = text2
name3 = text3

我想将它解析成单独的单元格 1x2,例如 name1 , text1。将来我想将 text1 视为字符串以与其他字符串进行比较。我该怎么做?我正在尝试使用正则表达式和令牌,但我无法为此编写适当的公式,如果有人可以帮助我,我将不胜感激!

4

1 回答 1

4

这段代码

input = {'name1 = text1';
         'name2 = text2';
         'name3 = text3'};

result = cell(size(input, 1), 2);
for row = 1 : size(input, 1)
    tokens = regexp(input{row}, '(.*)=(.*)', 'tokens');
    if ~isempty(tokens)
        result(row, :) = tokens{1};
    end
end

产生结果

result = 
    'name1 '    ' text1'
    'name2 '    ' text2'
    'name3 '    ' text3'

请注意,等号周围的空格被保留。您可以通过调整正则表达式来修改此行为,例如也尝试'([^\s]+) *= *([^\s]+)'

result = 
    'name1'    'text1'
    'name2'    'text2'
    'name3'    'text3'

编辑:基于user1578163的评论。

Matlab 还支持不那么贪婪的量词。例如'(.*?) *= *(.*)',如果文本包含空格,则正则表达式(注意星号后的问号)有效。会变身

input = {'my name1 = any text1';
         'your name2 = more text2';
         'her name3 = another text3'};

进入

result = 
    'my name1'      'any text1'    
    'your name2'    'more text2'   
    'her name3'     'another text3'
于 2012-08-20T11:31:33.203 回答