我有以下代码,我想存储包含匹配表达式的整行,但目前我只能存储表达式本身。
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
我做错了什么?
答案 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下查看“使用'匹配'关键字返回子字符串”,您将看到您获得的结果是您的代码所声明的内容(它返回与输入字符串匹配的部分)你提供的正则表达式)。我打算发布一个建议,但有人打败了我;-)。祝你好运。