我使用Scrapy抓取了一个网页,需要从某些对象中提取背景颜色。因为inline-css不是DOM的一部分,或者我读过,所以我需要创建一个正则表达式来扩充我当前的XPath并在对象的style属性中选择所需的值。我当前的XPath返回整个样式值,如下所示:
背景:#80FF00;高度:48像素;宽度:98px;颜色:#FFFFFF
我需要一个仅选择背景十六进制值的正则表达式(即:#80FF00)。我不需要验证值是否正确格式化(即([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6}))\b
),只需要抓住'background:'和以下';'之间的任何内容。
我是新手写正则表达式并感谢他们的帮助。
答案 0 :(得分:3)
以下正则表达式应该做你想要的,你想要抓取的东西将在第一个捕获组中:
background:(.*?);
在Python中
background = re.search(r'background:(.*?);', some_string).group(1)
.
匹配任何字符,*
表示重复前一个元素任意次,?
使其成为一个惰性匹配,因此它将匹配尽可能少的字符。这是必要的,以确保它不捕获多个分号,只停在最后一个分号。另一种选择是background:([^;]*)
,因为[^;]
只匹配非分号字符。