如何在Python中提取两个字符间的子串,从HTML字符串中获取颜色名
Python实现提取颜色列表的方法
方法1:使用正则表达式精准匹配(推荐)
因为所有颜色都在href以/colours/开头的<a>标签内,直接用正则匹配可以一步得到结果,避免提取到多余内容:
import re import html # 原始转义字符串 raw_str = '''<p><topic url="car-colours">Toyota Camry</topic> has <a href="/colours/dark-red">Dark Red</a><span> (2020)</span>, <a href="/colours/pearl-white">Pearl White</a><span> (2016 - 2017)''' # 还原HTML转义字符为正常符号 processed_str = html.unescape(raw_str) # 正则匹配a标签内的颜色文本,捕获组对应颜色名 toyota_camry_colours = re.findall(r'<a href="/colours/[^"]+">([^<]+)</a>', processed_str) print(toyota_camry_colours) # 输出:['Dark Red', 'Pearl White']
方法2:按指定规则提取>和<之间的内容后筛选
如果你需要严格按照提取>和<中间子串的思路实现,可参考以下代码:
import html raw_str = '''<p><topic url="car-colours">Toyota Camry</topic> has <a href="/colours/dark-red">Dark Red</a><span> (2020)</span>, <a href="/colours/pearl-white">Pearl White</a><span> (2016 - 2017)''' processed_str = html.unescape(raw_str) # 提取所有><之间的非空内容 parts = [] start = 0 while True: start = processed_str.find('>', start) if start == -1: break start += 1 end = processed_str.find('<', start) if end == -1: break part = processed_str[start:end].strip() if part: parts.append(part) start = end # 过滤掉非颜色的冗余内容 exclude_set = {'Toyota Camry', 'has', '(2020)', ',', '(2016 - 2017)'} toyota_camry_colours = [p for p in parts if p not in exclude_set] print(toyota_camry_colours) # 输出:['Dark Red', 'Pearl White']
内容的提问来源于stack exchange,提问作者markovv.sim
相关产品推荐
相关产品推荐

