0

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

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

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

Hello,my name is X
     X hello

我究竟做错了什么?

4

2 回答 2

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')

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

[~,~,~,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

于 2013-08-05T21:07:17.217 回答
0

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

于 2013-08-05T21:11:58.703 回答