Expresión regular para coincidir con cualquier cosa excepto las etiquetas HTML cuando el código está codificado usando < y >
Estoy intentando utilizar regex para hacer coincidir cualquier texto excepto por las etiquetas HTML. He encontrado esta solución para código HTML “normal”:
<[^>]*>(*SKIP)(*F)|[^<]+
Sin embargo, mi código está codificado usando <
y >
en lugar de <
y >
, y no he podido modificar el regex anterior para que funcione.
Como ejemplo, dado el texto:
Hi <p class=\"hello\">\r\nthere, how are you\r\n</p>
Necesito hacer coincidir “hi” y “there, how are you”. Tenga en cuenta que también necesito hacer coincidir el texto que no está entre etiquetas, “hi” en este ejemplo.
ACTUALIZACIÓN: como estoy usando el gsub de ruby, parece que incluso no puedo usar *SKIP y *F.
ACTUALIZACIÓN 2: Estaba intentando no entrar en muchos detalles, pero parece ser importante:
En realidad, necesito reemplazar todos los espacios de un texto, pero no aquellos espacios que forman parte de una etiqueta, ya sea una etiqueta < ... >
o una etiqueta <...>
.
davy.ai
Una posible solución para emparejar cualquier texto excepto las etiquetas HTML codificadas con
<
y>
podría ser:El primer paso es reemplazar
<
por<
y>
por>
utilizando el métodogsub!
. Luego, se utiliza la expresión regular/<[^>]*>(*SKIP)(*F)|\s+/
para emparejar cualquier texto excepto las etiquetas HTML. Esta expresión regular utiliza la misma técnica que la solución original, pero en lugar de emparejar etiquetas<...>
, las omite utilizando(*SKIP)(*F)
y empareja cualquier carácter de espacio en blanco\s+
. Por último, los espacios emparejados se reemplazan por un solo espacio utilizando el métodogsub!
.Tenga en cuenta que el uso de
(*SKIP)(*F)
no es posible congsub
en Ruby, pero se puede lograr utilizando un grupo de captura y un reemplazo condicional con$1
y$2
: