3 votes

Utilisation d'expressions régulières dans la partie "remplacer" d'une recherche/remplacement?

J'ai une grande quantité de texte tabulé (souligné) qui manque d'un caractère de puce en tête :

        un point
            un sous-point

Je veux remplacer chaque tabulation par 2 espaces, et ajouter un tiret devant. Voici le format cible dont j'ai besoin :

  - un point
    - un sous-point

Trouver :
Je peux utiliser l'expression régulière \t+\S pour trouver "n'importe quel nombre de tabulations, suivi de tout ce qui n'est pas une espace blanc". Cela fonctionne très bien, et la fonction "trouver" surligne le début de chaque ligne, jusqu'au premier caractère qui n'est pas une tabulation.

Remplacer :
Comment puis-je utiliser une expression régulière pour spécifier "remplacer chaque tabulation par 2 espaces, suivi d'un tiret et d'un espace, suivi du caractère qui n'est pas une tabulation d'origine"? Plus précisément :

  1. Comment spécifier que le remplacement doit se faire "autant de fois qu'il y a eu de correspondances dans la recherche"? (Ainsi trois tabulations deviendraient six espaces, etc.)
  2. Comment spécifier littéralement "un tiret puis un espace"?
  3. Comment spécifier "garder le caractère qui n'est pas une tabulation inchangé"?

Ma recherche m'a conduit à le concept de \1 mais je ne vois pas comment l'utiliser. Mes tests par essais et erreurs n'ont produit que des erreurs.
Mise à jour :
J'ai découvert une chose à propos de \1 : je dois utiliser des parenthèses dans ma chaîne de recherche : (\t+)(\S) puis utiliser cela dans la partie de remplacement : \1- \2. Cela m'aide à résoudre les points #2 et #3 ci-dessus, mais je suis toujours perdu pour le point #1 !
Mise à jour ultérieure :
Eh bien - #1 peut être une action de recherche/remplacement non regex simple tant qu'il n'y a pas de caractères de tabulation ailleurs dans le texte. C'est quelque chose que je dois maintenant investiguer !

J'essaie avec Gedit d'Ubuntu mais je pourrais aussi utiliser Notepad++ ou Sublime si vous avez des suggestions spécifiques à l'éditeur.

2voto

LPChip Points 53736

Il y a deux méthodes que vous pouvez utiliser.

Vous pouvez rechercher l'intégralité de la chaîne + ce qui suit, et utiliser des regroupements pour le remplacer par un ou plusieurs groupes mais pas tous. C'est là que $1 ou \1 entre en jeu.

Vous pouvez également ne rechercher que la partie que vous souhaitez remplacer, et simplement la remplacer par autre chose.

Tout d'abord, créez l'expression régulière que vous voulez remplacer explicitement et recherchez-la. Si votre recherche recherche plusieurs parties d'une chaîne et que vous voulez conserver quelque chose au milieu, alors le regroupement est nécessaire. Exemple : recherche de [b]text[/b] et remplacement par **text**

Votre expression régulière ressemblerait à quelque chose comme \[b\](.+)\]\/b\] et la remplacer par **\1**

Si vous avez seulement besoin de modifier chaque occurrence de texte qui est une chaîne continue, vous pouvez spécifiquement rechercher cela et le remplacer. Par exemple, rechercher          -Mon exemple et le remplacer par  - Mon exemple (ce qui remplace essentiellement tous les onglets par deux espaces, et ajoute un espace après le -, vous rechercheriez \t+- et le remplacer par  -

L'expression régulière ici signifie : rechercher tout onglet qui se produit 1 ou plusieurs fois, suivi d'un tiret. Si vous recherchez cette chaîne sans réellement la remplacer, vous verrez qu'elle sélectionnera le texte que vous voulez remplacer.

Si vous voulez substituer tout onglet par deux espaces, il vous suffit de rechercher \t et le remplacer par

Remarquez bien, j'ai utilisé un espace suivi de alt+255 partout dans ce message pour taper 2 espaces consécutifs, sinon SuperUser condense tout en 1 espace.

2voto

Toto Points 14447

Vous pouvez le faire avec Notepad++ en deux étapes :

Première étape :

  • Ctrl+H
  • Rechercher : \t
  • Remplacer par :    (2 espaces)
  • vérifier Wrap around
  • vérifier Regular expression
  • Remplacer tout

Deuxième étape :

  • Rechercher : ^\h+
  • Remplacer par : $0-
  • vérifier Wrap around
  • vérifier Regular expression
  • Remplacer tout

Explication :

^       : début de ligne
\h+     : 1 espace horizontal ou plus

Remplacement :

$0      : la correspondance complète (c'est-à-dire tous les espaces au début de chaque ligne)
-       : un tiret suivi d'un espace

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X