2011-05-03 12 views
7

Poszukuję sposobu użycia wyrażenia regularnego, aby usunąć wszystkie znaczniki html z ciągu znaków.
Więc jeśli mam <HTML><b><FONT color="red" size="3">Hello</FONT></b></HTML>, chciałbym otrzymać od niego hello.regexp dla znaczników html z Matlabem

Wiem, że prawdopodobnie będzie wyglądać jak znaczniki zagnieżdżone, ale tak naprawdę nie jest, ponieważ wszystko, co chcę tutaj zrobić, to usunąć wszystko między dwoma <>.

Używam do tego Matlaba, ale wyrażenie regularne jest dokładnie takie samo, więc możesz wnieść dowolną pomoc.
Dziękuję.

Odpowiedz

10

Moje rozwiązanie to:

>> str='<HTML><b><FONT color="red" size="3">Hello</FONT></b></HTML>'; 
>> regexprep(str, '<.*?>','') 

ans = 

Hello 
+0

fantastyczne, dzięki! –

3

Uznaje się powszechnie, że przy użyciu regexes do analizowania ogólnego HTML jest zła forma. Jeśli twój html jest znacznie bardziej skomplikowany niż podany przykład, powinieneś użyć parsera XML.

Dalsza dyskusja w tym słynnym pytaniu SO. RegEx match open tags except XHTML self-contained tags.

Jeśli chcesz przeanalizować zawartość prawidłowo, a następnie pobrać xml_io_tools i używać

doc = xml_read('test.html') 
doc.b.FONT.CONTENT 

Jeśli chcesz trzymać się z regexes, a następnie użyć odpowiedź Ilya, ale z jednym z regexes z połączonej odpowiedzi, np ,

str = '<HTML><b><FONT color="red" size="3">Hello</FONT></b></HTML>'; 
rx = '<(?:"[^"]*"['"]*|'[^']*'['"]*|[^'">])+>'; 
regexprep(str, rx, '') 
1

Skoro wspomniałeś, że chcesz, aby wyodrębnić „cześć” z powyższego pliku html (słownie nazwapliku.html), można użyć następujących w programie MATLAB:

doc = xmlread ("filename.html"); content = doc.item (0) .getTextContent

nadzieję, że to pomaga!

Powiązane problemy