Regex para que coincida con el contenido de la etiqueta mientras omitiendo simultáneamente el espacio en blanco liderando y fingente

StackOverflow https://stackoverflow.com/questions/3818219

Pregunta

Estoy tratando de escribir una regex que coincida con el contenido completo de una etiqueta, menos cualquier espacio en blanco líder o final. Aquí hay un ejemplo reducido de la entrada:

<tag> texto </tag>

Quiero que solo se coincidan con los siguientes (tenga en cuenta cómo se ha recortado el espacio en blanco antes y después del partido):

"texto"

Actualmente estoy tratando de usar este Regex en .NET (PowerShell):

(?<=<tag>(\s)*).*?(?=(\s)*</tag>)

Sin embargo, este Regex coincide con el "texto" más el espacio en blanco líder dentro de la etiqueta, que no está deseado. ¿Cómo puedo arreglar mi regex para que funcione como se esperaba?

¿Fue útil?

Solución

Dejar caer los lookounds; Simplemente hacen que el trabajo sea más complicado de lo que debe ser. En su lugar, use un grupo de captura para elegir la parte que desea:

<tag>\s*(.*?)\s*</tag>

La parte que quieres está disponible como $matches[1].

Otros consejos

No debe usar REGEXT para analizar HTML.

Use un analizador en su lugar.

También:Regex para eliminar los atributos de la etiqueta del cuerpo (C#)

También también: Regex Match Open Etiquetas excepto XHTML Etiquetas autónomas

Si todo eso no te convence, no uses el punto en el medio de tu expresión. Usa el escape alfanumérico. Tu punto está consumiendo espacios en blanco. Use W (creo) en su lugar.

Utilice estas expresiones regulares para despojar a los siguientes y principales espacios en blanco. /^\s+/ y /\s+$/

        test = "<tag>     test    </tag>";
        string pattern3 = @"<tag>(.*?)</tag>";
        Console.WriteLine("{0}", Regex.Match(test,pattern3).Groups[1].Value.Trim());
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top