Чтение HTML-файла в Matlab как «непрерывный» текст

Я читал HTML-файлы в Matlab с помощью readfile с интересом использовать regexp для извлечения из него данных. Функция возвращает данные файла в виде строки, которая сохраняет «структуру» файла 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 начинаниях.

Большое спасибо, Боб М.


person Bob M.    schedule 11.07.2011    source источник
comment
Не используйте регулярные выражения для анализа HTML, вместо этого используйте правильный парсер HTML.   -  person You    schedule 11.07.2011


Ответы (2)


Быстрый способ соединить эти вещи вместе может состоять в том, чтобы импортировать данные, а затем объединить их с помощью 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>
person Steve    schedule 11.07.2011
comment
Спасибо, Стив, это отлично работает. Я обнаружил, что regexprep немного лучше подходит для моей конкретной проблемы, когда в миксе также есть проблематичные пробелы. - person Bob M.; 11.07.2011

Регулярные выражения могут сделать это:

str = fileread('file.html');
str = regexprep(str,'\s*',' ');   %# replace multiple whitespaces with a space
person Amro    schedule 11.07.2011
comment
Спасибо, это сработало отлично. Я использую regexprep все чаще и чаще. - person Bob M.; 11.07.2011