Je vous recommanderais d'abandonner complètement regex - il est tout simplement trop difficile de le faire fonctionner dans des cas comme celui-ci. Tout ne peut pas être résolu facilement avec regex! Dans ce cas, la plupart des langages de script peuvent le faire assez facilement. J'ai écrit un morceau de JavaScript pour vous, ici - entrez simplement vos délimiteurs et votre entrée, puis cliquez sur Soumettre.
Pour ce qui est des explications: il se scinde par le délimiteur de début, puis, pour chaque "bloc", il se divise par le délimiteur de fin. Nous nous retrouvons avec un bloc de texte entre un début et une fin et effectuons un remplacement pour cela. Ensuite, nous rejoignons les blocs séparés. Ce n'est pas le moyen le plus efficace, mais c'est un peu plus facile que de traiter des caractères individuels.
Vieille solution, partiellement efficace, regex se trouve ci-dessous. je fortement vous recommande de ne pas l'utiliser.
Réponse rapide: n'utilisez pas Notepad ++, utilisez ce JS Snippet (entrez votre texte en bas à droite et cliquez sur Soumettre). Remplacer START
et END
dans le script en bas à gauche si nécessaire.
Vous pouvez également utiliser PowerShell, qui est natif de Windows (Vista):
Get-Content input.txt | %{ $_ -replace "(?<=START.*?)-(?=.*?END)", " " } | Out-File output.txt
Remplacer input.txt
et output.txt
en conséquence. Remarque: il doit s'agir de fichiers différents.
Cette solution particulière ne fonctionne sans bugs que si vous n’avez que un apparition de START
par ligne et un apparition de END
par ligne et ils ne couvrent pas les lignes - nous pouvons donc traiter chaque ligne séparément.
Compte tenu des garanties selon lesquelles une seule correspondance sera nécessaire par ligne, chaque correspondance étant contenue dans une ligne, la correspondance entre (?<=START.*?)-(?=.*?END)
et remplacer par un seul espace fonctionnerait - sauf Notepad ++ ne semble pas aimer ce motif particulier. Il prend en charge les regards indiscrets (en plein PCRE, apparemment), mais il y a quelque chose à ce sujet qui fait trébucher.
Une alternative, similaire à ce que Johannes a déjà répondu, consiste à utiliser un motif simple: (START.*?)-(.*?END)
et le remplacer par \1 \2
. Le problème ici est que cela ne fera que correspondre un trait d'union par ligne à la fois. Cela devient vite fastidieux.
Ici, nous essayons d’utiliser un langage de script plus complet. JavaScript est une bonne alternative. Cependant, il ne pas soutien regarder derrière. Sur le plan positif, nous pouvons exécuter les choses en boucle, de sorte que la solution fastidieuse précédente est réellement viable. J'ai créé un exemple ici .