Tách HTML tag bằng Regex

Mình đang làm quen với regex và mục đích là tách nội dung của html tag với regex <HTML-TAG\b[^>]*>([\s\S]*?)<\/HTML-TAG>

import re

HTML_CODE = '''
<html>
    <head>
        <title>Sample "Hello, World" Application</title>
    </head>
    
    <body bgcolor=white>
    <table border="0" cellpadding="10">
    <tr>
        <td>
            <img src="images/springsource.png">
        </td>
        <td>
            <h1>Sample "Hello, World" Application</h1>
        </td>
    </tr>
    </table>

    <p>This is the home page for the HelloWorld Web application. </p>
    <p>To prove that they work, you can execute either of the following links:</p>
    <ul>
        <li>To a <a href="hello.jsp">JSP page</a></li>
        <li>To a <a href="hello">servlet</a>.</li>
    </ul>
    </body>
</html>
'''

def GetHtmlTag(HTML_TAG, text):
    '''
    regex = <HTML-TAG\b[^>]*>([\s\S]*?)<\/HTML-TAG>
    '''
    blocks = re.findall(r"<" + HTML_TAG + r"\b[^>]*>([\s\S]*?)<\/" + HTML_TAG + r">", text)
    return blocks
    
if __name__ == '__main__':
    html_blocks = GetHtmlTag("td", HTML_CODE)
    
    for block in html_blocks:
        print(block)
        print("=" * 20)

Ouput sau khi chạy code là


                        <img src="images/springsource.png">

====================

                        <h1>Sample "Hello, World" Application</h1>

====================

Đoạn code đã lấy được nội dung tag như mình muốn, nhưng có 1 điều là phần tag nametag attribute không nằm trong output, có phải do API của python tự động lượt bỏ nội dung có trong regex vì mình đã test regex này trên http://regexr.com/, nó hoạt động tốt và có lấy luôn phần tag nametag attribute

Mọi người giúp mình sửa lại regex để lấy luôn phần tag nametag attribute được không?

1 Like
<HTML-TAG\b[^>]*>[\s\S]*?<\/HTML-TAG>

Bạn bỏ 2 cái dấu ngoặc tròn là được :smile: Hoặc bạn thử cho 2 dấu ngoặc tròn bao toàn bộ biểu thức của bạn thì sẽ thấy điều đặc biệt :smile:

(<HTML-TAG\b[^>]*>([\s\S]*?)<\/HTML-TAG>)

Bạn thử dùng regex101.com xem, value nó chỉ có phần bên trong thôi :smile: nên là vấn đề của regex chứ không hẳn là của python

2 Likes

Đã từng có lúc Regex chạy trên http://regexr.com/, http://www.regexpal.com/ ngon lành. Copy & paste vào đoạn code JavaScript nó chạy trớt quớt. Hổng biết bên Python có bị như vậy hông?

1 Like

chưa gặp trường hợp này, đều chạy ngon tr6en python

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?