J'ai un gros fichier HTML qui a beaucoup de balisage qui ressemble à ceci:
<p class="MsoNormal" style="margin: 0in 0in 0pt;">
<span style="font-size: small; font-family: Times New Roman;">stuff here</span>
</p>
J'essaie de faire une recherche et un remplacement Vim pour se débarrasser de tout class=""
et style=""
j'ai du mal à rendre le match non hideux.
Ma première tentative a été celle-ci
%s/style=".*?"//g
mais Vim ne semble pas aimer le ?
. Malheureusement, la suppression du ?
rend le match trop gourmand.
Comment puis-je rendre mon match non hideux?
regex
vim
regex-greedy
Mark Biek
la source
la source
Réponses:
Au lieu d'
.*
utilisation.\{-}
.%s/style=".\{-}"//g
Regarde aussi
:help non-greedy
la source
\v
(drapeau très magique), vous voudrez l'utiliser.{-}
.{1,3}
accolades. Le signe moins-
signifie: répéter le moins possible (petit == moins);)La recherche non gourmande dans vim se fait en utilisant l'opérateur {-}. Comme ça:
essayez juste:
la source
Quel est le problème avec
la source
Si vous êtes plus à l'aise avec la syntaxe regex PCRE, qui
vous avez [g] vim compilé avec la fonction perl, testez en utilisant
: ver et inspecter les fonctionnalités; si + perl est là, vous êtes prêt à partir)
essayez de rechercher / remplacer en utilisant
Exemple. Échangez les attributs src et alt dans la balise img:
la source
perldo
fonctionne très bien, mais ne met malheureusement pas en évidence le test sélectionné lors de la frappe de l'expression rationnelle.J'ai trouvé qu'une bonne solution à ce type de question est:
(ou Perl si vous préférez). IOW, plutôt que d'apprendre les particularités des expressions rationnelles de vim, utilisez un outil que vous connaissez déjà. Utiliser perl ferait le? travail de modificateur pour dégoûter le match.
la source
/pattern
vérifier que vous correspondez correctement au motif avant de l'appliquer et d'utiliser lec
modificateur dans votre expression régulière vim est également agréable :)Avec
\v
(comme suggéré dans plusieurs commentaires)la source
Le plugin eregex.vim gère les opérateurs non gourmands de style Perl
*?
et+?
la source
G'day,
Le traitement regexp de Vim n'est pas trop brillant. J'ai trouvé que la syntaxe regexp pour sed correspond à peu près aux capacités de vim.
Je règle habituellement la mise en évidence de la recherche sur (: set hlsearch), puis je joue avec l'expression rationnelle après avoir entré une barre oblique pour passer en mode de recherche.
Edit: Mark, cette astuce pour minimiser les correspondances gourmandes est également couverte dans l'excellent livre "Sed & Awk" de Dale Dougherty ( lien Amazon aseptisé ).
Le chapitre trois "Comprendre la syntaxe des expressions régulières" est une excellente introduction aux capacités d'expression rationnelle plus primitives impliquées avec sed et awk. Seulement une courte lecture et fortement recommandé.
HTH
à votre santé,
la source
\v
cela aide beaucoup à nettoyer la syntaxe.