【问题标题】:Python Regular Expression- Selecting value based on surounding patternsPython正则表达式-根据周围模式选择值
【发布时间】:2011-12-08 22:13:45
【问题描述】:

我使用 Scrapy 抓取了一个网页,需要从某些对象中提取背景颜色。因为 inline-css 不是 DOM 的一部分,或者我已经阅读过,所以我需要创建一个正则表达式来扩充我当前的 XPath 并在对象的样式属性中选择所需的值。我当前的 XPath 像这样返回整个样式值:

背景:#80FF00;高度:48px;宽度:98px;颜色:#FFFFFF

我需要一个只选择背景十六进制值的正则表达式(即:#80FF00)。我不需要验证该值的格式是否正确(即 ([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6}))\b ),只需要抓取 'background:' 和以下 ';' 之间的任何内容

我是编写正则表达式的新手,感谢您的帮助。

【问题讨论】:

    标签: python regex scrapy


    【解决方案1】:

    下面的正则表达式应该做你想做的事,你要抓取的东西将在第一个捕获组中:

    background:(.*?);
    

    在 Python 中

    background = re.search(r'background:(.*?);', some_string).group(1)
    

    . 匹配任意字符,* 表示重复前一个元素任意多次,? 使其成为惰性匹配,因此它会匹配尽可能少的字符。这是必要的,以确保它不会捕获多个分号并且只在最后一个分号处停止。替代方法是 background:([^;]*),因为 [^;] 只会匹配非分号字符。

    【讨论】:

    • 感谢 FJ... 效果很好。对于那些使用 Scrapy 实现此功能的人,请注意不需要 .group(1)
    猜你喜欢
    • 2015-07-23
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多