2010-02-08 20 views

回答

2

要找到

>>> re.sub("(\w+)\s*\{.*?\}","\\1 {}","""selector { value: blah; }""") 
'selector {}' 

{}並刪除它,下面可以工作(蟒蛇)之間的所有文字,但如果你需要一個複雜的,你寧願尋找的CSS解析器。

+1

如果樣式表甚至是非常複雜的,那麼CSS解析器是非常必要的。在樣式規則中,無論是在字符串中(在規範中*定義爲不需要分隔符),@media組以及許多特定於瀏覽器的黑客行爲,在樣式規則中可能會出現大括號。 – eyelidlessness 2010-02-08 16:01:09

+0

是的,絕對正確。正確的答案是css解析器,但是我之前沒有使用css解析器,所以很難向OP建議哪一個是合適的。 – YOU 2010-02-08 16:15:54

+0

任何人都知道一個合適的CSS解析器?已經googld'無濟於事。 – 2010-02-08 16:26:37

2

模式「{。*?}」的意思是「花括號後跟可能最短的字符串,緊接着是大括號」。

如果您使用的是不懂貪婪和非貪婪的正則表達式匹配器(「*」是貪婪的,「*?」是非貪婪的),您可以使用類似「{[^} ] *}「,這意味着」大括號後緊跟着一個緊接大括號的零個或多個字符,緊接着是一個緊密的大括號「。

請注意,這並非萬無一失 - 如果您將花括號作爲定義的一部分關閉,則會中斷。唯一的解決方法是使用真正的.css解析器。

如果您想要在大括號之間捕獲數據,您需要在花括號內部添加圍繞模式部分的括號,例如:「{(。*?)}」,它將捕獲除大括號。

+0

看起來類似於我以前運行過的東西,但實際上並不起作用。我運行它,它什麼都沒有返回。 – 2010-02-08 16:23:19

+0

@Gavin:這個答案中的表達式只是匹配開始和結束括號之間的所有內容。我的假設是,如果您可以匹配它,那麼您可以輕鬆地替換與{}匹配的內容,但這取決於您使用的工具。你說你在使用textmate,但是在問題中不清楚你是否需要textmate特定的答案。如果是這樣,你可能想要添加textmate作爲標籤,並明確問「如何我替換textmate中的這個expressin」 – 2010-02-08 16:55:50

+0

@Gavin:我不使用textmate,從掃描文檔的猜測是,你需要把括號圍繞要替換的模式部分(例如:{(。*?)}),然後替換爲空字符串。 – 2010-02-08 16:57:43

相關問題