如何在matlab中存储与表达式匹配的行

时间:2013-08-05 19:35:13

标签: matlab

我有以下代码,我想存储包含匹配表达式的整行,但目前我只能存储表达式本身。

expr='\hello';
fileread = regexp(filetext, expr, 'match');
fid = fopen('data.txt', 'wt');
fprintf(fid, '%s\n',fileread{:});

假设我的文件包含:

 Hello,my name is X
 X hello 
Not this line

我的文件data.txt存储

hello
hello

而不是包含表达式的整行。 所需的data.txt

Hello,my name is X
     X hello

我做错了什么?

2 个答案:

答案 0 :(得分:0)

根据您与regexp函数交互的方式,我假设您将所有文件文本放在一个变量中。让我们假设变量采用以下形式:

my name is hello there
Hello,my name is X
 X hello
 Not this line

供您参考,我使用sprintf

构建了这个变量
string = sprintf('my name is hello there\nHello,my name is X\n X hello\n Not this line')

您可以使用以下正则表达式提取具有问候语的行:

[~,~,~,d] = regexp(string, '.*?[H|h]ello.*?\n')

可以使用以下命令从单元格数组中检索结果:

>> d{1}

ans =

my name is hello there


>> d{2}

ans =

Hello,my name is X


>> d{3}

ans =

 X hello

请注意,我使用了几个惰性量词.*?,如果您想了解更多信息,请在此链接中查看懒惰而非贪婪http://www.regular-expressions.info/repeat.html

答案 1 :(得分:0)

你做错了是没有正确使用MATLAB regexp函数。如果您在此site下查看“使用'匹配'关键字返回子字符串”,您将看到您获得的结果是您的代码所声明的内容(它返回与输入字符串匹配的部分)你提供的正则表达式)。我打算发布一个建议,但有人打败了我;-)。祝你好运。