【问题标题】:How to write python regex to find guid in html?如何编写 python 正则表达式以在 html 中查找 guid?
【发布时间】:2023-03-17 13:02:02
【问题描述】:

如何在下面的 HTML 部分找到 guid?

HTML 示例:

<td>xxxxxxx</td>
<td style="display: none">e3aa8247-354b-e311-b6eb-005056b42341</td>
<td>yyyyyy</td>
<td style="display: none">e3aa8247-354b-e311-b6eb-005056b42342</td>
<td>zzzz</td>

【问题讨论】:

  • 使用解析器从td's 中提取文本然后匹配它?
  • 使用 BeautifulSoup4 解析。
  • ids = re.findall(r'(.{36})', data, re.I)
  • @alexey 确定,只要您在隐藏的 td 中没有其他任何 36 个字符长的东西

标签: python html regex html-parsing


【解决方案1】:
re.findall("[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}",the_whole_text)

这是可行的,因为 uuid 始终是这种格式...通常在解析 html/xml 时,您应该实际使用 html/xml 解析器而不是 re ...因为 re 很难嵌套

【讨论】:

    【解决方案2】:

    使用 HTML 解析器,例如“漂亮”且透明的 BeautifulSoup 包。

    这个想法是用xxxxxxxyyyyyy 文本定位td 元素并获取以下td 兄弟的文本值(假设xxxxxxxyyyyyy 是您事先知道的标签):

    from bs4 import BeautifulSoup
    
    data = """
    <tr>
        <td>xxxxxxx</td>
        <td style="display: none">e3aa8247-354b-e311-b6eb-005056b42341</td>
        <td>yyyyyy</td>
        <td style="display: none">e3aa8247-354b-e311-b6eb-005056b42342</td>
        <td>zzzz</td>
    </tr>
    """
    
    soup = BeautifulSoup(data)
    
    print soup.find("td", text="xxxxxxx").find_next_sibling('td').text
    

    打印:

    e3aa8247-354b-e311-b6eb-005056b42341
    

    【讨论】:

    • 虽然这通常是解析 html/xml 的正确方法......在这种情况下,uuid 总是匹配适合 re 的特定模式:) (+1 都是一样的,因为通常这绝对是解析 xml/html 的正确方法)
    • @JoranBeasley 好点,谢谢。虽然,我们不知道真正的输入 - 例如。可能有多个 uuid,需要根据 xxxxxxxyyyyyy 标签区分它们
    • @alecxe 我绝对同意......但既然他说他只是想要 uuid,这可能有点矫枉过正
    • 有时我只是不知道答案有什么问题以及所有反对票的情况。
    猜你喜欢
    • 2019-01-20
    • 2010-10-11
    • 2020-11-06
    • 1970-01-01
    • 2019-11-04
    • 2023-03-03
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多