python - 正则表达式,仅获取带有以美元符号开头的项目的图像 URL
问题描述
所以,我知道这听起来有点奇怪,但基本上这是我的 HTML 示例:
$400 + free shipping</title>
<link>https://www.dealnews.com/Samsung-50-4-K-HDR-LED-Smart-TV-for-400-free-shipping/17336849.html?iref=rss-dealnews-editors-choice</link>
<description><img src='http://c.dlnws.com/image/upload/f_auto,t_large,q_auto/content/vdiy8a75wg8v7bo92dhq'
我只想捕获在它之前具有美元符号方式的项目的 URL,例如 $.... 之后的所有内容,而不是 (URL) 目前我的正则表达式是这样的:
img src='([^']+)'.*
这会抓取每个 img src,但是我只希望像我之前所说的那样,前面有“$”符号的图像,基本上我不想要任何与此 HTML 页面上的产品无关的图像。
解决方案
查看您提供的 HTML 示例,您的产品图像似乎直接在<description>
HTML 标记之前。直接在所需 URL 之前使用非捕获组而不是一路回溯到潜在的(但未授予)$ 符号所需的处理能力(和时间)更少。如果您将<description>
标签专门用于产品,则此正则表达式将满足您的需求:
(?:<description><img src=')([^']+)
其他需要考虑的事项:
- 如果您需要检查 HTML 代码中的多行,请确保添加 Global 和 Multiline 修饰符。
- 如果您需要考虑 HTML 实体并允许将 HTML 实体与已解析的 HTML 组合在一起,请考虑创建一个 OR 语句以允许它们在您的 Regex 中使用。例如,允许在标签之前
<
和<
之前img
使用:(?:<description>(?:<|<)img src=')([^']+)
如果我们同时考虑到描述标签的打开和关闭实体,我们最终会得到:(?:(?:<|<)description(?:>|>)(?:<|<)img src=')([^']+)
推荐阅读
- angularjs - 自定义元素指令不起作用
- php - 登录控制器中覆盖的身份验证方法不起作用
- c# - Twilio/Authy 返回 401 和验证码
- java - 无法用空格替换二维数组中的默认零
- sql-server - 使用 AD 凭据通过 SSH 隧道从 Mac 连接到 Visual Studio Code 中的 MS SQL 实例?
- reactjs - 在 react-leaflet 中渲染 1000 多个标记需要很长时间,而且用户体验很糟糕,需要改进我的方法
- r - 用 'x[is.na(x)]=0' 将 NA 替换为 0 会替换整个数据帧,而不仅仅是 NA?
- python - 为列表中的每个值添加键的快速方法
- c# - ASP.Net Core 2.0 不是可选选项
- c++ - 将双精度数组转换为 std::complex