我有一个像这样的单元格数组3x1:
name1 = text1
name2 = text2
name3 = text3
我希望将其解析为单独的单元格1x2,例如name1,text1。将来我想将text1视为一个字符串,以便与其他字符串进行比较。我该怎么做?我正在尝试使用正则表达式和令牌,但我无法为此编写正确的公式,如果有人可以帮助我,我将不胜感激!
答案 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'