2013-08-14 2 views
1

У меня есть часть html-кода, которую я хочу уничтожить некоторые части стиля, я знаю, что мне нужно регулярное выражение, но я не знаю, как создать регулярное выражение или даже как применить его в моем C# код. Ниже приведен образец исходной строки:заменить строку с помощью подстановочных знаков

<p style="color: #000000; text-transform: none; letter-spacing: normal; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-size-adjust: none; font-stretch: normal; -webkit-text-stroke-width: 0px;"> 

А вот вывод, который я хотел бы получить после операции замены:

<p> 

Я хочу, чтобы избавиться от атрибута стиля. И мне нужно сделать это для всех событий <p ...>

Существует множество примеров подобных работ, но я действительно смутился об этом. Таким образом, любой ключ к решению был бы замечательным. Заранее спасибо.

+2

Проверьте принятый ответ: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags - рассмотрите возможность использования HTML-анализатора, а не регулярного выражения. – Jamiec

ответ

3

Вы действительно найти регулярное выражение учебник (example), чтобы узнать, как спички работу, то замена будет легче ...

string output = Regex.Replace(input, @"(?<=<p)[^>]+", ""); 

См demo.

Чтобы удалить только атрибут стиля, вы могли бы, возможно, использовать это:

string output = Regex.Replace(input, @"(?<=<p)\s*style=""[^""]+""", ""); 

Обратите внимание, что это не будет работать, если атрибут стиля сразу после <p (с любым количеством пробелов).

Updated demo.


Чтобы удалить стиль атрибута в любом месте HTML, возможно, вы можете использовать (немного безопаснее, чем предыдущий, может быть):

string output = Regex.Replace(input, @"(?<=<p)([^>]*?)\s*style=""[^"">]+""", "$1"); 

Reupdated demo.

+1

Это хорошее начало, но вытирает * каждый атрибут * не только атрибут стиля. Подключить '

' в него – Jamiec

+0

пока что мне просто нужно избавиться от всех атрибутов, но, конечно, было бы полезно узнать, как удалить определенные атрибуты. –

+0

@TolgaEvcimen Извините, что занял еще какое-то время, чтобы иметь одно регулярное выражение, чтобы удалить атрибут стиля в любом месте тега p. Я просто обновил регулярное выражение, чтобы это сделать. – Jerry

0

Не знаю, как сделать это в C#, но используя общий пример в Баше регулярных выражениях, я хотел бы сделать:

echo "$pattern" | sed -r 's/(<p).*(>)/\1\2/' 

Где:

(<p) ----- Captures the opening bracket with p 
.* ----- Anything inbetween up to the next ">" 
() ----- Captures the closing bracket 
\1\2 ----- Gives you back the two captured things, 
      in this order, with no space inbetween 

Надеется, что это помогает, но опять же, вы нужно искать замену в C# самостоятельно.

+1

Пожалуйста, избегайте профанации в ответах. – Jamiec

Смежные вопросы