0
votes

Remplacement des éléments de texte HTML par une variable d'incrément

Dans la partie HTML ci-dessous, je souhaite remplacer, chaque fois qu'un texte est trouvé, par une variable incrémentale:

<li class="cat-item">
<a href="#" >x1</a>
</li>
<li class="cat-item">
<a href="#" >x2</a>
</li>
<li class="cat-item">
<a href="#" >x3</a>
<ul class='children'>
<li class="cat-item">
<a href="#" >x4</a>
</li>
<li class="cat-item">
<a href="#" >x5</a>
</li>
<li class="cat-item">
<a href="#" >x6</a>

Pour cela en utilisant l'incrément x++ :

<li class="cat-item">
<a href="#" >Beautiful Reclessness</a>
</li>
<li class="cat-item">
<a href="#" >Comfort vs. Appearance</a>
</li>
<li class="cat-item">
<a href="#" >Highlights of the Runway</a>
<ul class='children'>
<li class="cat-item">
<a href="#" >Christian Louboutin Show</a>
</li>
<li class="cat-item">
<a href="#" >Givenchy F/W 2016</a>
</li>
<li class="cat-item">
<a href="#" >Spring by Gaultier</a>

Existe-t-il un moyen dans Notepad ++ ou Vim (en recherchant entre > < ) de trouver le contenu du texte en utilisant REGEX et de le remplacer par un compteur x ?


4 commentaires

Le remplacement devrait être logique, ce qui, je pense, nécessite un script. C'est facile à faire en Perl ou Python, etc.


Jetez un œil à stackoverflow.com/q/4213800/372239


@ D.BenKnoble j'ai corrigé ma question. Notepad ++ ou Vim.


@Leb_Broth a alors fourni une réponse vim; Je pense que vous le trouverez plus simple / plus extensible, et il ne nécessite pas de téléchargement / configuration de dépendances supplémentaires.


3 Réponses :


1
votes

J'espère que ça t'as aidé.

  1. Télécharger le plugin de script python
  2. plugins> script python> nouveau script> enregistrer sous "increment.py"

Développez votre regex sur regex101 ou ailleurs et écrivez le script

i=0

def increment(match):
  global i
  i=i+1
  return "x"+str(i)

editor.rereplace('(?<=>)\\b[^><]+', increment)

Enregistrez et exécutez votre script: plugins> script python> scripts> incrémentation


0 commentaires

4
votes

Réponse simple de vim:

  1. Ouvrez le vim filename
  2. Configurer une variable de commodité :let num=1
  3. Faites le remplacement— :g/href/execute printf("normal! citx%d", num) | let num=num+1

La commande :global permet d'effectuer une opération toutes les lignes correspondant à un motif (dans ce cas, href ). L'opération que nous voulons faire est de changer le texte à l'intérieur de la balise <a> en x suivi du contenu de num et d'incrémenter num .

execute nous permet de construire une ligne de commande à partir de chaînes; Je combine souvent avec printf() car je le trouve plus facile à lire. normal! est une commande Ex qui nous permet d'exécuter des commandes en mode normal. cit est un vim'isme pour "changer à l'intérieur de la balise" du mode normal. Ensuite, nous lui fournissons simplement le texte de remplacement approprié ( x%d ) et incrémentons le compteur.


Si vous vous demandez comment je suis arrivé à cela, c'est un modèle assez bien établi parmi les vimmers. En pratique, il m'a probablement fallu environ une minute pour terminer toute la séquence (plus rapidement si je l'utilisais plus souvent), donc ce n'est pas une de ces réponses "passer 30 minutes à essayer d'écrire une bonne regex" - cela peut être fait dans une session d'édition en direct sans trop réfléchir, si la personne qui édite a une bonne compréhension des fondamentaux de vim.


0 commentaires

0
votes

Une approche légèrement différente sur vim:

\='x'.c ................. concatenate 'x' with the counter

En utilisant \zs et \ze nous pouvons sélectionner le motif que nous voulons supprimer. Le compteur donnera la séquence de nombres concaténée avec un espace:

:let c=1 | g/a href="#" >\zs.*\ze</ s//\='x'.c/g | let c+=1


0 commentaires