2011-12-08 34 views
3

我已經使用Scrapy抓取了一個網頁,並且需要從某些對象中提取背景顏色。因爲inline-css不是DOM的一部分,或者我已經閱讀過,所以我需要創建一個正則表達式來增強我當前的XPath並在對象的style屬性中選擇所需的值。我現在的XPath返回整個樣式值,像這樣:Python正則表達式 - 基於周圍模式選擇值

背景:#80FF00;高度:48像素;寬度:98px;顏色:#FFFFFF

我需要一個正則表達式,將只選擇背景十六進制值(即:#80FF00)。我不需要驗證該值是否正確合成(即([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6}))\b),只需要即可獲取'background:'和''之間的任何內容';'

我是新來寫正則表達式,並感謝幫助。

回答

3

下面的正則表達式應該做你想要什麼,你想抓住將是第一個捕捉組中的東西:

background:(.*?); 

在Python

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

.匹配任何字符,*手段重複以前的元素任意次數,並且?使它成爲一個懶惰的匹配,所以它將匹配儘可能少的字符。這是必要的,以確保它不捕獲多個分號,只停留在最後一個。另一種方法是background:([^;]*),因爲[^;]只能匹配非分號字符。

+0

謝謝FJ ...效果很好。對於那些使用Scrapy的人來說,請注意'.group(1)'是不需要的。 – Clayton