2011-05-03 33 views
7

Tôi đang tìm cách sử dụng regexp để xóa tất cả các thẻ html khỏi chuỗi.
Vì vậy, nếu tôi có <HTML><b><FONT color="red" size="3">Hello</FONT></b></HTML> Tôi muốn nhận số hello từ đó.regexp cho các thẻ html với Matlab

Tôi biết nó có thể trông giống như các thẻ lồng nhau, nhưng nó không thực sự, bởi vì tất cả những gì tôi muốn làm ở đây là để loại bỏ bất cứ điều gì giữa hai <>.

Tôi đang sử dụng Matlab để làm như vậy, nhưng regexp giống hệt nhau, vì vậy, vui lòng đóng góp bất kỳ trợ giúp nào.
Cảm ơn bạn.

Trả lời

10

giải pháp của tôi là:

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

ans = 

Hello 
+0

tuyệt vời, cảm ơn! –

3

Nó được chấp nhận rộng rãi rằng việc sử dụng regexes để phân tích html chung là hình thức xấu. Nếu html của bạn phức tạp hơn nhiều so với ví dụ đã cho, thì bạn nên sử dụng một trình phân tích cú pháp XML để thay thế.

Thảo luận thêm trong câu hỏi SO nổi tiếng này. RegEx match open tags except XHTML self-contained tags.

Nếu bạn muốn phân tích nội dung đúng, sau đó tải xml_io_tools và sử dụng

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

Nếu bạn muốn gắn bó với regexes, sau đó sử dụng câu trả lời Ilya, nhưng với một trong những regexes từ câu trả lời liên quan, ví dụ như ,

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

Vì bạn nói rằng bạn muốn trích xuất "hello" từ html ở trên (nói filename.html) tập tin, bạn có thể sử dụng sau trong MATLAB:

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

Hope this helps!