Сопоставлять только пробелы внутри {} - PullRequest
0 голосов
/ 25 августа 2009

Предполагая, что мне дали следующую строку для сравнения:

#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 один очень удобный:

Ответы [ 2 ]

2 голосов
/ 25 августа 2009

Учитывая, что некоторые элементы CSS имеют значения из нескольких слов (border: 1px solid red), описанный вами процесс удаления пробелов будет катастрофическим. Я бы порекомендовал вам просто удалить пробелы в следующих местах:

  • После '{'
  • До '}'
  • До и после ';'
  • До и после ':'

К счастью, из-за синтаксиса CSS ни один из этих шаблонов не будет появляться за пределами разделов {...}. К сожалению, я не знаю специфики движка регулярных выражений .NET, возможно, это сработает:

( +(?=[};:])|(?<=[{;:]) +)
1 голос
/ 25 августа 2009

Попробуйте это:

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

Но это можно обмануть, если в разделах @media есть правила (т. Е. Вложенные скобки) или голосовые правила, использующие скобки в качестве метасимволов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...