Expressão regular para remover tags HTML

Eu estou usando o Expression regular seguinte para remover tags html de uma seqüência de caracteres. Funciona, exceto que deixo a tag de fechamento. Se eu tentar remover: https://stackoverflow.com/questions/3790681/regular-expression-to-remove-html-tags/blah deixa o .

Eu não conheço a syntax de expressões regulares e me atrapalhei com isso. Alguém com conhecimento RegEx pode me fornecer um padrão que funcione.

Aqui está o meu código:

  string sPattern = @"]*>"; Regex rgx = new Regex(sPattern); Match m = rgx.Match(sSummary); string sResult = ""; if (m.Success) sResult = rgx.Replace(sSummary, "", 1); 

Eu estou olhando para remover a primeira ocorrência das tags e .

Usar uma expressão regular para analisar HTML é repleto de armadilhas. HTML não é um idioma regular e, portanto, não pode ser 100% analisado corretamente com um regex. Este é apenas um dos muitos problemas que você vai encontrar. A melhor abordagem é usar um analisador HTML / XML para fazer isso por você.

Aqui está um link para uma postagem no blog que escrevi há algum tempo e que entra em mais detalhes sobre esse problema.

Dito isto, aqui está uma solução que deve corrigir esse problema específico. Não é de forma alguma uma solução perfeita.

 var pattern = @"< (img|a)[^>]*>(?[^< ]*)<"; var regex = new Regex(pattern); var m = regex.Match(sSummary); if ( m.Success ) { sResult = m.Groups["content"].Value; 

Para transformar isso:

 'mammapapa' 

nisso:

 'mamma papa' 

Você precisa replace as tags por espaços:

 .replace(/< [^>]*>/g, ' ') 

e reduza os espaços duplicados em espaços únicos:

 .replace(/\s{2,}/g, ' ') 

em seguida, apare os espaços iniciais e finais com:

 .trim(); 

O que significa que a sua function de remover tag tem esta aparência:

 function removeTags(string){ return string.replace(/< [^>]*>/g, ' ') .replace(/\s{2,}/g, ' ') .trim(); } 

Então, o analisador de HTML que todos estão falando é o Html Agility Pack .

Se estiver limpo XHTML, você também pode usar System.Xml.Linq.XDocument ou System.Xml.XmlDocument .

Para remover também os espaços entre tags, você pode usar o seguinte método uma combinação entre regex e um trim para espaços no início e no final do html de input:

  public static string StripHtml(string inputHTML) { const string HTML_MARKUP_REGEX_PATTERN = @"< [^>]+>\s+(?=< )|<[^>]+>"; inputHTML = WebUtility.HtmlDecode(inputHTML).Trim(); string noHTML = Regex.Replace(inputHTML, HTML_MARKUP_REGEX_PATTERN, string.Empty); return noHTML; } 

Então, para a seguinte input:

  

test text

test 1

test 2

test 3

A saída será apenas o texto sem espaços entre tags html ou espaço antes ou depois do html: “test text test 1 test 2 test 3”.

Observe que os espaços antes do test text são do test text html e o espaço após o test 3 é do test 3

html.

Você pode usar bibliotecas já existentes para remover as tags html. Um bom é Chilkat C # Library .

pode usar:

 Regex.Replace(source, "< [^>]*>", string.Empty); 

Aqui está o método de extensão que estou usando há algum tempo.

 public static class StringExtensions { public static string StripHTML(this string htmlString, string htmlPlaceHolder) { const string pattern = @"< (.|\n)*?>"; string sOut = Regex.Replace(htmlString, pattern, htmlPlaceHolder); sOut = sOut.Replace(" ", String.Empty); sOut = sOut.Replace("&", "&"); sOut = sOut.Replace(">", ">"); sOut = sOut.Replace("<", "< "); return sOut; } } 

Remova a imagem da string, usando uma expressão regular em c # (pesquisa de imagem executada por id de imagem)

 string PRQ=\"logo\"/ var regex = new Regex("( match.Groups[1].Value + ""); 

Por que não tentar quantificador relutante? htmlString.replaceAll("< \\S*?>", "")

(É Java, mas o principal é mostrar a ideia)

Retirar elementos HTML

 /< \/?[\w\s]*>|< .+[\W]>/g 

Isso eliminará todo o HTML e deixará o texto. Isso funciona bem mesmo para elementos HTML mal formados (ou seja, elementos que estão faltando tags de fechamento)

Referência e exemplo (Ex.10)

Aqui está um método de extensão que criei usando uma expressão regular simples para remover tags HTML de uma string:

 ///  /// Converts an Html string to plain text, and replaces all br tags with line breaks. ///  ///  ///  [Extension()] public string ToPlainText(string s) { s = s.Replace("
", Constants.vbCrLf); s = s.Replace("
", Constants.vbCrLf); s = s.Replace("
", Constants.vbCrLf); s = Regex.Replace(s, "< [^>]*>", string.Empty); return s; }

Espero que ajude.