Necesitaba un código Regex que me eliminase todas las etiquetas <a href ..></a> (de apertura y cierre) de cualquier cadena de texto (string).
ANTES:
“mi web es <a href=”miweb.com”>www.miweb.com</a> veréis que chula, ver también <a href=’www.otraweb.com’ target=”_blank”>otraweb.com</ a>”
EL RESULTADO QUE SE QUIERE OBTENER:
“mi web es www.miweb.com veréis que chula, ver también otraweb.com”
Más de 1 hora buscando por internet y no he encontrado ningún código que me solucionase el problema.
He desarrollado una función, que además de solucionar el anterior problema, sirve para eliminar cualquier etiqueta HTML de las que tienen cierre.
El siguiente código es válido para eliminar etiquetas de apertura y cierre de cualquier cadena de caracteres, tales como; <a href, <div, <span, etc .., es decir, todas aquellas que tienen asociada una etiqueta de cierre; </a>, </div>, </span>, etc ..
Este código no es válido para eliminar etiquetas que no tengan asociada una de cierre; <br> (o <br/>), <hr>, etc .
La siguiente función eliminará todas las etiquetas tag html, incluyendo sus parámetros, pero mantendrá el texto contenido entre ellas.
Ideal para formatear código HTMl a texto plano.
''' <summary>
''' Elimina todas las etiquetas html (tags) de apertura y cierre. Mantiene (no elimina) el texto contenido entre ellas.
''' </summary>
''' <param name="str">La cadena de texto (string) sobre la cuál se quieren eliminar las etiquetas</param>
''' <param name="TagStart">Determinada etiqueta para la cual se quieran eliminar sus aperturas y cierres.
''' Debe incluirse el char. de apertura seguido del nombre de la etiqueta</param>
''' ej: <a , <div , <span , etc ..
''' <returns>Devuelve la cadena de texto del arg. "str", sin las etiquetas de apertura y cierre.</returns>
''' <remarks>Por Alejandro Barrada Martín</remarks>
Public Function RemoveHtmlTagsStartEnd(ByVal str As String, ByVal TagStart As String) As String
Dim result As String = Nothing
Dim HtmlTagEnd As String = TagStart.Replace("<", "").Replace("< ", "")
For i As Integer = 0 To str.Length - 1
If Not i >= str.Length - 1 - TagStart.Length Then
If str.Substring(i, TagStart.Length) = TagStart Then
For j As Integer = i To str.Length - 1
If Not j >= str.Length - 1 - 2 Then
If str.Substring(j, 2) = """>" _
Or str.Substring(j, 2) = "'>" Or str.Substring(j, 2) = " >" Then
i = j + 2
Exit For
End If
End If
Next
For j As Integer = i To str.Length - 1
If Not j >= str.Length - 1 - HtmlTagEnd.Length - 1 Then
If str.Substring(j, 2 + HtmlTagEnd.Length) = "</" & HtmlTagEnd Then
i = j + 2 + HtmlTagEnd.Length
Exit For
ElseIf str.Substring(j, 3 + HtmlTagEnd.Length) = "</ " & HtmlTagEnd _
Or str.Substring(j, 3 + HtmlTagEnd.Length) = "< /" & HtmlTagEnd Then
i = j + 3 + HtmlTagEnd.Length
Exit For
Else
result &= str.Substring(j, 1)
End If
End If
Next
Else
result &= str.Substring(i, 1)
End If
Else
result &= str.Substring(i, 1)
End If
Next
Return result
End Function
Ejemplo de llamada a dicha función:
Dim textoHtml As String _
= "mi web es <a href='miweb.com'>www.miweb.com</a> veréis que chula" _
& ", ver también <a href='www.otraweb.com' target='_blank'>otraweb.com</ a>"
Dim textoSinEtiquetasAHref As String = RemoveHtmlTagsStartEnd(textoHtml, "<a")
Response.Write(textoSinEtiquetasAHref)
Como resultado se tendrá:
mi web es www.miweb.com veréis que chula, ver también otraweb.com
Finalizo el post indicando que, si alguien conoce algún patrón ReGex para lo siguiente, que postee, y tras comprobarlo lo publicaré en este mismo post, para que sea de ayuda a otros programadores.
Patrones Pendientes de Publicación:
1) Cómo eliminar etiquetas de apertura y cierre para una determinada etiqueta, es decir, eliminar <a href y todos sus parametros> mantener el texto entre las apertura y cierre </a eliminar etiqueta cierre>, pero usando algún patrón de expresión regular
2) Cómo eliminar todas las etiquetas (apertura y cierre, y también sólo apertura) de una cadena.
Ideal para los que quieran convertir un código HTML a texto plano.
Return system.Text.RegularExpressions.Regex.Replace("CadenaStringALaQueQuitarTodasLasTags", "<(.|\n)*?>", "")
A COLABORAR !




BREVE INTRO - REGEX EN .NET - RECOGER CADENA CON SÓLO SUS NUMEROS
EJ.: RECOJER NUMEROS