2013-08-05 29 views
0

我有下面的代碼,我想存儲整個包含匹配表達式的行,但目前我只能存儲表達式本身。如何在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 

代替含有表達整行。 想要的數據.txt

Hello,my name is X 
    X hello 

我做錯了什麼?

+0

'filetext'的格式是什麼? – Jacob

+0

你期望你的data.txt文件包含什麼?你知道'regexp'函數在做什麼嗎? – horchler

+0

data_files ='hello.lnt'; A = textread(data_files,'%s','delimiter','\ n'); filetext = fileread(data_files); 我期望data.txt包含整個包含expr的行。 – LearnerRealTimeControlSystem

回答

0

基於您與正則表達式函數交互的方式,我將假設您將所有文件文本都放在一個變量中。讓我們想象一下變量的形式如下:

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

0

你在做什麼錯不在使用MATLAB regexp功能正常。如果您在此site上查看「使用'match'關鍵字返回子字符串」,您會看到您得到的結果是您的代碼所期望的結果(它返回輸入字符串中與您提供的正則表達式匹配的部分)。我打算髮表一個建議,但有人毆打我;-)。祝你好運。

相關問題