如何用Python从指定HTML代码中提取可变位数的浮点数?
如何用Python从指定HTML中提取可变位数的浮点数
这里有两种实用的方法可以帮你提取目标浮点数,而且完全支持位数可变的格式(比如2.4、2490.30这类):
方法一:直接用正则表达式处理HTML字符串
因为你的HTML结构比较简单,直接用正则匹配整个内容就能快速拿到结果。我们用\d+\.\d+这个正则模式,它可以匹配任意位数的整数部分+小数点+任意位数的小数部分的浮点数。
import re # 你的HTML内容 html_content = """<html> <body> <p> BSE##B#As on 17 Apr 18 | 16:00@C#7@P#@HL#249.30,251.50,252.55,246.80,248.20,Listed </p> </body> </html>""" # 编译正则模式,匹配所有符合格式的浮点数 float_pattern = re.compile(r'\d+\.\d+') # 提取所有匹配到的浮点数(字符串形式) extracted_float_strings = float_pattern.findall(html_content) # 可选:把字符串转换为数值类型的浮点数 extracted_floats = [float(num) for num in extracted_float_strings] print("字符串形式的结果:", extracted_float_strings) # 输出:['249.30', '251.50', '252.55', '246.80', '248.20'] print("数值形式的结果:", extracted_floats) # 输出:[249.3, 251.5, 252.55, 246.8, 248.2]
方法二:用BeautifulSoup解析HTML后再提取(更规范)
如果之后你的HTML结构变得复杂,比如有多个标签、无关内容,用BeautifulSoup先定位到目标文本所在的标签,再用正则匹配会更可靠,避免误匹配其他无关的浮点数。
首先你需要安装BeautifulSoup:pip install beautifulsoup4
然后运行下面的代码:
from bs4 import BeautifulSoup import re html_content = """<html> <body> <p> BSE##B#As on 17 Apr 18 | 16:00@C#7@P#@HL#249.30,251.50,252.55,246.80,248.20,Listed </p> </body> </html>""" # 解析HTML文档 soup = BeautifulSoup(html_content, 'html.parser') # 定位到目标p标签,提取它的文本内容 target_text = soup.find('p').get_text() # 同样用正则匹配浮点数 float_pattern = re.compile(r'\d+\.\d+') extracted_float_strings = float_pattern.findall(target_text) extracted_floats = [float(num) for num in extracted_float_strings] print(extracted_float_strings) print(extracted_floats)
正则扩展说明
如果需要支持带负号的浮点数(比如-24.5),可以把正则模式改成:r'-?\d+\.\d+'
如果需要同时支持整数(比如2490)和浮点数,可以改成:r'-?\d+(?:\.\d+)?'
内容的提问来源于stack exchange,提问作者yadav
相关产品推荐
相关产品推荐

