2017-01-31 4 views
2

Kann man mit der FIND/REPLACE-Funktion von Notepad ++ Folgendes tun?Leerzeichen durch Bindestriche ersetzen, aber nur für Text zwischen Anführungszeichen im Text TAGS = ""

Ich habe eine Textdatei, wo ich Leerzeichen zwischen den Anführungszeichen des Textes TAGS="*" mit Bindestrichen ersetzen möchte.

Beispiel:

TAGS="tag1,tag2,tag 3,tag4,tag 5" 

sollte geworden:

TAGS="tag1,tag2,tag-3,tag4,tag-5" 

Bisher kann ich den Text, den ich mit möchte finden:

FIND WHAT: TAGS="*" 

Aber wie habe ich es Leerzeichen ersetzen Striche?

--------------------- UPDATE ----------------- Meine Frage vor tag1 verwendet, tag2, aber die tatsächlichen Daten in der Datei haben keine Zahlen, nur Wörter.

diese folgende sind drei aktuelle Zeilen aus der Datei. Ich brauche Räume zwischen den Zitaten von TAGS = „*“ zu finden und ersetzen nur die Räume mit Bindestrichen:

<DT><A HREF="http://www.kundaliniyoga.org/pranayam.html" ADD_DATE="1452557806" LAST_VISIT="1452557806" LAST_MODIFIED="1452557806" TAGS="kundalini,yoga,fire breath,breathing,breath of fire">Kundalini Yoga - Pranayama - Breathing Techniques</A> 
<DT><A HREF="http://www.foodrepublic.com/2015/05/19/40-ways-world-makes-awesome-hot-dogs" ADD_DATE="1432954394" LAST_VISIT="1432954394" LAST_MODIFIED="1432954394" TAGS="recipe,cooking,hot dog">40 Ways The World Makes Awesome Hot Dogs | Food Republic</A> 
<DT><A HREF="http://www.thecomputermanual.com/fix-your-boot-with-bcdedit-bootsect-bcdboot-winre-and-winpe/" ADD_DATE="1431836110" LAST_VISIT="1431836110" LAST_MODIFIED="1431836110" TAGS="windows stuff,bcdboot,bcdsect,repair,boot">Fix Windows boot, Fix your Boot sequence with BcdEdit, BootSect, BCDboot, WINRE,...</A> 

In den Zeilen weiter oben gibt es 3 Fälle von TAGS = „*“, die ich hier gewonnen habe um sie leicht zu sehen:

TAGS="kundalini,yoga,fire-breath,breathing,breath-of-fire" 
TAGS="recipe,cooking,hot-dog" 
TAGS="windows-stuff,bcdboot,bcdsect,repair,boot" 

Antwort

3

Verwenden Sie die folgende regex:

Finden Sie, was: (?:\G(?!^)|\bTAGS=")[^\s"]*\K\s+
Ersetzen mit: -

Einzelheiten:

  • (?:\G(?!^)|\bTAGS=") - Prüft entweder das Ende der vorherigen erfolgreichen Übereinstimmung (\G(?!^)) oder
  • [^\s"]* - 0+ Zeichen als ein Leerzeichen und "
  • \K - Spiel zurückgesetzt Bediener den Text bisher
  • \s+ abgestimmt Verwerfen - 1+ Whitespaces

Siehe Screenshot mit folgenden Einstellungen:

enter image description here

+1

Heilige Kuh. Das war perfekt. Ich bin immer noch beeindruckt davon, wie makellos das funktioniert hat. DANKE! –

2

Verwenden sie die folgenden suchen/ersetzen-Muster in Regex-Modus und ein ersetze alle: aussehen sollte

TAGS="kundalini,yoga,fire breath,breathing,breath of fire" 
TAGS="recipe,cooking,hot dog" 
TAGS="windows stuff,bcdboot,bcdsect,repair,boot" 

, die nach dem suchen/ersetzen, das gesamte Dokument abdecken (oder Auswahl, die du willst). Beachten Sie, dass ich keine Anstrengungen unternehme, nach TAGS="..." zu suchen, unter der Annahme, dass Sie keine Zeichenketten des Formulars tag123 oder tag 123 irgendwo anders in Ihrem Dokument haben.

Suche:

tag\s+(\d*) 

ersetzen:

tag-$1 

Eingang:

tag1,tag2,tag 3,tag4,tag 5 

Ausgabe:

tag1,tag2,tag-3,tag4,tag-5 
+1

@Sayse Eigentlich brauchen wir das Komma überhaupt nicht, weil das '(\ d *)' Muster sowieso am Ende der Tag-Nummer endet. –

+0

gute Antwort! aber diese Regex ersetzt nur einzelne Leerzeichen mit * - * –

+0

Ja, es funktioniert jetzt !. :) Danke –

Verwandte Themen