You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

re.findall能否输出纯匹配字符串列表?如何修改正则实现?

问题:使用re.findall()提取纯商品名称列表

re.findall()可以输出仅包含目标匹配字符串的列表,只需调整正则表达式的写法即可。以下是具体问题和解决方案:

现有HTML片段示例

[<p class="a-text-left a-size-base">Klasisch 1 Säulen Grün S</p>, <p class="a-text-left a-size-base">Klasisch 3 Säulen Braun L</p>, <p class="a-text-left a-size-base">Klasisch 3 Säulen Braun M</p>, <p class="a-text-left a-size-base">Klasisch 3 Säulen Grün M</p>, <p class="a-text-left a-size-base">Mit Hängematte Grün L</p>, <p class="a-text-left a-size-base">Weinachten 3 Säulen Grün L</p>]

当前使用的正则表达式

var_text = re.findall(r'>.+?<', str(varyasyonlar_text))

错误输出示例

['>Klasisch 1 Säulen Grün S<', '>, <', '>Klasisch 3 Säulen Braun L<', '>, <', '>Klasisch 3 Säulen Braun M<', '>, <', '>Klasisch 3 Säulen Grün M<', '>, <', '>Mit Hängematte Grün L<', '>, <', '>Weinachten 3 Säulen Grün L<']

需求:得到仅包含纯商品名称的干净列表。


解决方案

方案1:修改正则表达式(精准捕获目标内容)

通过添加捕获组并精准匹配目标标签,让re.findall()只返回商品名称:

var_text = re.findall(r'<p class="a-text-left a-size-base">([^<]+)</p>', str(varyasyonlar_text))

正则说明:

  • <p class="a-text-left a-size-base">:精准定位目标p标签的开头
  • ([^<]+):捕获组,匹配所有非<的字符(即商品名称,遇到</p>的<时停止)
  • </p>:匹配标签结尾

执行后会直接得到干净的商品名称列表:

['Klasisch 1 Säulen Grün S', 'Klasisch 3 Säulen Braun L', 'Klasisch 3 Säulen Braun M', 'Klasisch 3 Säulen Grün M', 'Mit Hängematte Grün L', 'Weinachten 3 Säulen Grün L']

方案2:使用HTML解析库(更健壮的方案)

正则处理HTML容易受标签格式变化影响,推荐用专业的HTML解析库如BeautifulSoup:

from bs4 import BeautifulSoup

# 解析HTML并提取目标标签文本
soup = BeautifulSoup(str(varyasyonlar_text), 'html.parser')
var_text = [p.get_text(strip=True) for p in soup.find_all('p', class_='a-text-left a-size-base')]

这种方法无需担心标签属性调整、格式换行等问题,兼容性更强。


内容的提问来源于stack exchange,提问作者Enes Kasikci

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 13:40:54