2011-07-11 76 views
0

我一直在閱讀Matlab中的HTML文件readfile,有興趣使用regexp從中提取數據。該函數將數據作爲字符串返回,這保留了HTML文件的「結構」,例如換行符。例如,如果您嘗試使用以下內容對文件執行文件讀取,則它將返回一個具有相同結構的字符串。在Matlab中讀取HTML文件爲'連續'文本

<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN"> 
<HTML> 
    <HEAD> 
     <TITLE> 
    A Small Hello 
     </TITLE> 
    </HEAD> 
</HTML> 

我正在尋找將返回一串連續的功能等......

<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN"> <HTML> <HEAD> <TITLE> A Small Hello </TITLE> </HEAD> <BODY> <H1>Hi</H1> <P>This is very minimal "hello world" HTML document.</P> </BODY> </HTML>

這種格式將有助於我regexp努力。

非常感謝, 鮑勃中號

+1

[不使用正則表達式解析HTML](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454),請改用適當的HTML解析器。 – You

回答

1

一個快速的方法把這些東西堵塞在一起可能是導入然後將數據使用的strcat將它們連接起來。

代碼

imported_string = importdata(filename) 
imported_string_together = strcat(imported_string{:}) 

產生以下輸出

imported_string = 

    '<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">' 
    '<HTML>' 
    ' <HEAD>' 
    '  <TITLE>' 
    '  A Small Hello' 
    '  </TITLE>' 
    ' </HEAD>' 
    '</HTML>' 


imported_string_together = 

<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN"><HTML> <HEAD>  <TITLE>  A Small Hello  </TITLE> </HEAD></HTML> 

但這不是真正有效。

我發現返回fopen/fread/fscanf類型函數以便以可預測的方式快速加載內容有時很有用。例如,你可以使用下面的代碼來創建你想要的東西沒有那麼多的複製和和其他的廢話:

filename = 'test.html'; 
maxReadSize = 2^10; 

fid = fopen(filename); 
mystr = fscanf(fid, '%c', maxReadSize) 

生成以下的輸出:

<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN"><HTML> <HEAD>  <TITLE>  A Small Hello  </TITLE> </HEAD></HTML> 
</HTML> 
+0

謝謝史蒂夫,這個作品很棒。我發現'regexprep'對於我的特定問題稍微好一些,當混合中有空白的時候也是有問題的。 –

1

正則表達式可以做到這一點:

str = fileread('file.html'); 
str = regexprep(str,'\s*',' '); %# replace multiple whitespaces with a space 
+0

謝謝,這工作完美。我越來越頻繁地使用'regexprep'。 –