Erfassen

Erfassen

Ich brauche Hilfe beim Suchen und Ersetzen in Notepad++.

Beispiel:

$250 'Hallo 1' Nehmen Sie '____'

500 $ 'Hallo 2' Nehmen Sie '____'

$1000 'Hallo 3' Nimm '____'

Stellen Sie sich vor, es gibt Tausende dieser Einträge bis zu „Hallo 9999“.

Ich möchte „____“ durch eine Zahl ersetzen, ohne „Hallo 1“ oder „Hallo 2“ zu ändern.

Ich hätte gerne folgendes Ergebnis:

$250 'Hallo 1' Nehmen Sie '250'

500 $ „Hallo 2“ Nehmen Sie „500“

$1000 'Hallo 3' Nimm '1000'

Wie kann ich dabei vorgehen? Ich würde erwarten, dass ich einen regulären Ausdruck verwende.

Antwort1

Aktivieren Sie das Kontrollkästchen „Regulärer Ausdruck“ und verwenden Sie:

Suchen:

\$(.*?) (.*?) Take '(.*?)'

Ersetzen:

\$$1 $2 Take '$1'

Dadurch wird nach einer Zeile gesucht, die im Wesentlichen so aussieht:

$anything anything Take 'anything'  

.*? bedeutet in regulären Ausdrücken jedes beliebige Zeichen außer einer neuen Zeile.
Wenn Sie eine Erfassungsgruppe wie .*? in Klammern setzen, wird der Inhalt in einer Variablen gespeichert, die $n ist, wobei n die n-te Gruppe ist.

Nach der Suche haben wir also drei Variablen:
$1 = 250 $2 = 'Hallo 1' $3 = ___

Mit dem Ersetzen ersetzen wir die eigentliche ganze Zeile durch \$ (das Entfernen des Dollarzeichens macht es zu einem wörtlichen $ und nicht zu einer Variable).
Die ganze Zeile wird durch $$1 $2 '$1' ersetzt.
Wie Sie sehen, verwenden wir wieder die Variable $1, die die erste Erfassungsgruppe ist.


Ich bin ziemlich neu bei SO, also entschuldigen Sie, wenn meine Erklärungen nicht so toll sind.

Antwort2

Dies sollte die Notepad++-Syntax sein, nachdem Sie das Optionsfeld „Regulärer Ausdruck“ unten im Dialogfeld „Suchen/Ersetzen“ ausgewählt haben:

Find:  (\$(\d+).*Take\s+').*(')
Replace:  \1\2\3

Erläuterung:

Klammern gruppieren Variablen der Reihe nach, indem sie von links nach rechts zählen:

(\$(\d+).*Take\s+').*(')
|--------1--------|
   |-2-|             |3|

\$: bedeutet, Dollarzeichen zu finden

\d+: bedeutet, Ziffern zu suchen, „+“ am Ende bedeutet eins oder mehr (d. h. es MUSS mindestens eine Ziffer sein).

.*: „.“ bedeutet JEDES Zeichen und „*“ bedeutet ein oder mehrere.

Nehmen Sie: ist lediglich das Wort Text.

\s+: bedeutet Leerzeichen und „+“ bedeutet ein oder mehrere.

...

Da nun alles AUSSER den letzten Zeichen in einfachen Anführungszeichen gruppiert ist, gilt:

\1\2\3

Setzt einfach die erste und dritte Klammer und die zweite dazwischen (wobei die zweite Klammer den Dollarwert angibt).

Antwort3

Versuche dies

Aktivieren Sie zunächst Reguläre Ausdrücke

Notepad++-Einstellungen zum Aktivieren von regulären Ausdrücken

https://regex101.com/r/aW4gG2/2

(\$\d+)(.*Take ')(.*)(')
Ersatz finden :\1\2\1\4

Erfassen

Es gibt vier Gruppen für diesen Ausdruck

Eingang:$250 'Hello 1' Take '____'

Gruppe 1
(\$d+)= $250- das bedeutet, dass mit einem $ (als Literalzeichen maskiert) begonnen werden soll, dann Ziffern ( \d) 1 oder höher, sodass es bei der letzten Ziffer endet, egal ob es 3 oder 15 ist. In Ihrem Beispiel standen sie am Anfang der Zeile, aber das nehme ich nicht an. Wenn sie jedoch die Zeile beginnen, möchten Sie vielleicht ein hinzufügen, ^das sie^(\Sd+)

Gruppe 2
(.*Take ')= 'Hello 1' Take '- der Ausdruck besagt .*, dass jedes Zeichen beliebig oft wiederholt werden kann, also nimmt es alles, bis es sieht, Takeund dann nimmt es das Take ', weil ich das aufgeschrieben habe, und hört dort auf.

Gruppe 3
(.*)= - ____dies nimmt den internen Speicherplatz ein, im Grunde nimmt es alles 0 oder mehr Mal ein. In diesem Fall sind es alles Unterstriche, aber geschrieben würde es alles erfassen, was Sie dort haben. Es würde alles bis zum Ende der Zeilen erfassen, außer ich habe etwas, das folgt, das ihm sagt, wann es aufhören soll

Gruppe 4
(')= – 'dies weist Gruppe 3 an, an der Markierung anzuhalten '. Außerdem wird die 'Markierung zum Neuanordnen in der eigenen Gruppe erfasst.

Auswechslung

\1\2\1\4

Gruppen werden ab ihrer öffnenden Klammer nummeriert, aber in diesem Fall ist alles linear und ohne Verschachtelung, also ist es ziemlich offensichtlich. \1\2\3\4würde alles so lassen, wie es ist. Aber wir möchten die dritte Gruppe durch die erste Gruppe ersetzen, also … \1\2\1\4funktioniert das. Einer der wichtigsten Punkte hier war sicherzustellen, dass wir diese vierte Gruppe erfasst haben, um sie am Ende zu ersetzen. Ansonsten nichts allzu Kompliziertes.

Ausführung

Richten Sie das einfach in Ihrer Suchen-Ersetzen-Funktion ein und klicken Sie dann auf „Alles ersetzen“. Damit sollte das Problem behoben sein.

Bearbeiten

Mir ist aufgefallen, dass Sie das $ in Ihrem Ersatz entfernen wollten. Sie müssen also einige kleinere Änderungen an meinen ursprünglichen Vorschlägen vornehmen, obwohl es im Grunde dasselbe ist.

Eingang:$250 'Hello 1' Take '____'

(\$)(\d+)(.*Take ')(.*)(')
Ersatz finden :\1\2\3\2\5

verwandte Informationen