如何使用Python正则表达式从指定HTML片段提取Size信息?
提取HTML中Size对应内容的正确实现方法
嘿,我来帮你搞定这个Size内容提取的问题~ 你的正则表达式其实差几步就对了,不过先给你两种可行的方案,其中更推荐用HTML解析库,因为正则处理HTML太容易踩坑啦:
方案一:修正你的正则表达式
你的正则有几个小问题需要调整:
- 括号
(s)是正则的特殊字符,得转义成\(s\); - 匹配内容的时候用非贪婪模式
.+?更稳妥,避免意外匹配到多余内容; - 正则的结尾要闭合完整,不能断在中间。
修正后的完整代码:
import re # 你的HTML片段 html = '<tr> <td style="padding-left: 5px;" class="subheader" valign="top" width="147" align="right">Size</td> <td valign="top" style="padding-left: 5px;">1.64 GB in 2 file(s)</td> </tr>' # 修正后的正则 match_result = re.search( r'<tr> <td style="padding-left: 5px;" class="subheader" valign="top" width="147" align="right">Size</td> <td valign="top" style="padding-left: 5px;">(.+?) in \d+ file\(s\)</td> </tr>', html ) if match_result: size = match_result.group(1) print(size) # 输出:1.64 GB
方案二:用HTML解析库(强烈推荐)
正则处理HTML太脆弱了——比如哪天HTML里的属性顺序变了、多了个空格,正则就失效了。用BeautifulSoup这种专业的HTML解析库会靠谱得多:
首先先安装库(如果还没装的话):
pip install beautifulsoup4
然后写解析代码:
from bs4 import BeautifulSoup html = '<tr> <td style="padding-left: 5px;" class="subheader" valign="top" width="147" align="right">Size</td> <td valign="top" style="padding-left: 5px;">1.64 GB in 2 file(s)</td> </tr>' soup = BeautifulSoup(html, 'html.parser') # 找到文本为"Size"的td标签,再取它的下一个兄弟td的内容 size_label_td = soup.find('td', string='Size') if size_label_td: size_content = size_label_td.find_next_sibling('td').get_text(strip=True) # 如果只需要前面的数值+单位(比如1.64 GB),可以拆分字符串 size_value = size_content.split(' in ')[0] print(size_value) # 输出:1.64 GB
这种方法不管HTML标签的属性怎么调整,都能准确找到对应的内容,维护起来也方便很多~
内容的提问来源于stack exchange,提问作者maurizio de ruggiero
相关产品推荐
相关产品推荐

