2013-07-15 6 views
4

У меня есть программа, которую я пишу, это Предполагаемый, чтобы снять html-теги из строки. Я пытаюсь заменить все строки, начинающиеся с «<» и заканчивающиеся на «>». Это (очевидно, потому что я здесь прошу об этом) пока не работает. Вот что я пробовал:Зачистка html-тегов в строке

StrippedContent = Regex.Replace(StrippedContent, "\<.*\>", "") 

Это просто возвращает то, что кажется случайной частью исходной строки. Я также пробовал

For Each StringMatch As Match In Regex.Matches(StrippedContent, "\<.*\>") 
    StrippedContent = StrippedContent.Replace(StringMatch.Value, "") 
Next 

Что сделал то же самое (возвращает то, что кажется случайной частью исходной строки). Есть лучший способ сделать это? К лучшему я имею в виду способ, который работает.

+0

Я редактировал свой титул. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

+0

@JohnSaunders Хорошо. –

ответ

20

Описание

Это выражение будет:

  • найти и заменить все теги ничего
  • остерегайтесь проблематичной крайние случаи

Regex : <(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*>

Заменить с: ничего

enter image description here

Пример

Образец текста

Примечание трудный крайний случай в мыши над функцией

these are <a onmouseover=' href="NotYourHref" ; if (6/a>3) { funRotator(href) } ; ' href=abc.aspx?filter=3&prefix=&num=11&suffix=>the droids</a> you are looking for.

Код

Imports System.Text.RegularExpressions 
Module Module1 
    Sub Main() 
    Dim sourcestring as String = "replace with your source string" 
    Dim replacementstring as String = "" 
    Dim matchpattern as String = "<(?:[^>=]|='[^']*'|=""[^""]*""|=[^'""][^\s>]*)*>" 
    Console.Writeline(regex.Replace(sourcestring,matchpattern,replacementstring,RegexOptions.IgnoreCase OR RegexOptions.IgnorePatternWhitespace OR RegexOptions.Multiline OR RegexOptions.Singleline)) 
    End Sub 
End Module 

Строка после замены

these are the droids you are looking for. 
+1

Очень хороший ответ, мой человек.Я буду отмечать его как правильно –

+2

Действительно лучшее регулярное выражение для этой темы, которое я видел до сих пор! +1 – Sebastian

+1

, используя этот ответ, как можно попытаться избежать тегов
, чтобы разрывы отображались? У меня есть документ со многими перерывами, поэтому, когда используется вышеупомянутый ответ, текст возвращается как один большой абзац –

4

Ну, это доказывает, что вы всегда должны искать Google для ответа. Вот метод, который я получил от http://www.dotnetperls.com/remove-html-tags-vbnet

Imports System.Text.RegularExpressions 

Module Module1 
    Sub Main() 
     Dim html As String = "<p>There was a <b>.NET</b> programmer " + 
      "and he stripped the <i>HTML</i> tags.</p>" 
     Dim tagless As String = StripTags(html) 
     Console.WriteLine(tagless) 
    End Sub 
    Function StripTags(ByVal html As String) As String 
     Return Regex.Replace(html, "<.*?>", "") 
    End Function 
End Module 
+0

Это решение будет иметь проблемы, если какая-либо из ваших разметки содержит такие атрибуты, как: 'some text more text'. –

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