在matlab中进行regexp解析

时间:2012-08-20 11:13:20

标签: regex parsing matlab

我有一个像这样的单元格数组3x1:

name1 = text1
name2 = text2
name3 = text3

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

1 个答案:

答案 0 :(得分: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'