仅匹配{}内的空格

时间:2009-08-25 01:26:48

标签: regex

假设我已获得以下字符串以匹配:

#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 Regex引擎,所以如果有人需要快速测试环境,我发现这个Silverlight非常方便:http://www.regexlib.com/RESilverlight.aspx

2 个答案:

答案 0 :(得分:2)

鉴于某些CSS元素具有多字值(border: 1px solid red),您描述的空白删除过程将是灾难性的。我建议您只删除以下位置的空格:

  • 在'{'
  • 之后
  • 之前'}'
  • ';'之前和之后
  • ':'
  • 之前和之后

幸运的是,由于CSS的语法,这些模式都不会出现在{...}部分之外。不幸的是,我不知道.NET正则表达式引擎的细节,也许这会起作用:

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

答案 1 :(得分:1)

试试这个:

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

但如果@media部分(即嵌套大括号)中有规则,或者使用大括号作为元字符的语音规则,这可能会被愚弄。