2009-08-25 58 views
0

假設我一直在考慮以下字符串來匹配:僅匹配空格內{}

#sidebar h1 ul li{ #a:hover; height : 100px ;color: #fffff ; font-family: @fonts; } 

我要的是未封閉兩側的花括號{}內只匹配空格通過文字。

我現在的正則表達式如下:

((?!\w)|(?<!\w)) 

但它也很相配的括號以外的字符。我試着環視,但它不是真正的工作出路我想象的,我只是吸吮在正則表達式..

我要剝去CSS類內容的所有空格因此字符串會凝結成:

#sidebar h1 ul li{#a:hover;height:100px;color:#fffff;font-family:@fonts;} 

順便說一句,我使用的.NET正則表達式引擎,因此,如果有人需要爲快速測試環境中,我發現這個Silverlight的一個非常方便的:http://www.regexlib.com/RESilverlight.aspx

+0

您的CSS是否包含任何嵌套支架對,就像'@ media'部分?如果是這樣,你將無法用正則表達式來做到這一點。 – 2009-08-25 02:01:17

回答

1

試試這個:

Regex.Replace(str, @"(?:\B\s+|\s+\B)(?=[^{}]*\})", "") 

但是,如果在@media部分(即,嵌套花括號)內存在規則,或者使用花括號作爲元字符的語音規則,這可能會被愚弄。

+0

謝謝。這似乎工作,但因爲我也想支持@media部分,我不得不看看沒有正則表達式的解決方案 – Tigraine 2009-08-25 10:33:30

2

鑑於某些CSS元素具有多字值(border: 1px solid red),所描述的空白刪除過程將會是災難性的。我建議你只是刪除空格在以下地方:

  • 後「{」
  • 之前「}」
  • 前後「;」
  • 前後「:」

幸運的是,因爲CSS的語法,沒有這些模式將{...}部分外發生。不幸的是,我不知道.NET正則表達式引擎的細節,也許這將工作:

(+(?=[};:])|(?<=[{;:]) +)