Tengo un gran archivo HTML que tiene muchas marcas que se ve así:
<p class="MsoNormal" style="margin: 0in 0in 0pt;">
<span style="font-size: small; font-family: Times New Roman;">stuff here</span>
</p>
Estoy tratando de hacer un Vim de búsqueda y reemplazo para deshacerse de todos class=""
y style=""
pero estoy teniendo problemas para hacer el partido ungreedy.
Mi primer intento fue este
%s/style=".*?"//g
pero a Vim no parece gustarle el ?
. Desafortunadamente, eliminar el ?
hace que el partido sea demasiado codicioso.
¿Cómo puedo hacer que mi pareja no sea graciosa?
regex
vim
regex-greedy
Mark Biek
fuente
fuente
Respuestas:
En lugar de
.*
usar.\{-}
.%s/style=".\{-}"//g
Ver también
:help non-greedy
fuente
\v
(bandera muy mágica), querrá usar.{-}
.{1,3}
hace (llaves). El signo menos-
significa: repetir lo menos posible (poco == menos);)La búsqueda no codiciosa en vim se realiza utilizando el operador {-}. Me gusta esto:
sólo inténtalo:
fuente
Qué hay de malo en
fuente
Si se siente más cómodo sintaxis regex PCRE, que
tienes [g] vim compilado con la función perl, prueba usando
: ver e inspeccionar características; si + perl está ahí, estás listo para ir)
intente buscar / reemplazar usando
Ejemplo. Intercambie los atributos src y alt en la etiqueta img:
fuente
perldo
funciona muy bien, pero desafortunadamente no resalta la prueba seleccionada al escribir la expresión regular.Descubrí que una buena solución para este tipo de preguntas es:
(o perl si lo prefieres). IOW, en lugar de aprender las peculiaridades de la expresión regular de vim, usa una herramienta que ya conoces. Usar perl haría que el? modificador de trabajo para desagrupar el partido.
fuente
/pattern
para verificar que estás haciendo coincidir el patrón correctamente antes de aplicarlo y usar elc
modificador en tu expresión regular vim también es bueno :)Con
\v
(como se sugiere en varios comentarios)fuente
El complemento eregex.vim maneja operadores no codiciosos de estilo Perl
*?
y+?
fuente
G'day
El procesamiento de expresiones regulares de Vim no es demasiado brillante. Descubrí que la sintaxis regexp para sed es la combinación adecuada para las capacidades de vim.
Por lo general, configuro el resaltado de búsqueda en (: establecer hlsearch) y luego juego con la expresión regular después de ingresar una barra para ingresar al modo de búsqueda.
Editar: Mark, ese truco para minimizar la correspondencia codiciosa también está cubierto en el excelente libro de Dale Dougherty "Sed & Awk" ( enlace de Amazon desinfectado ).
El Capítulo Tres "Comprensión de la sintaxis de expresiones regulares" es una excelente introducción a las capacidades de expresión regular más primitivas involucradas con sed y awk. Solo una lectura corta y muy recomendable.
HTH
salud,
fuente
\v
, ayuda a limpiar mucho la sintaxis.