Wie ersetze ich alle Zeichenfolgen durch Zahlen, die in jeder Zeichenfolge in Notepad ++ enthalten sind?


108

Ich versuche alle Werte mit folgendem Muster zu finden:

value="4"
value="403"
value="200"
value="201"
value="116"
value="15"

und ersetzen Sie es durch Wert innerhalb der Bereiche.

Ich verwende den folgenden regulären Ausdruck, um das Muster zu finden:

.*"\d+"

Wie kann ich einen Ersatz machen?


2
Was ist das Ersatzteil? Könnten Sie ein Beispiel geben?
Toto

^. * value = "([^"] *) ". * $ Überprüfen Sie diesen regulären Ausdruck und ersetzen Sie den Wert \ 1, wo der Wert benötigt wird
Nikhil KS

Antworten:


191

Drücken Sie in Notepad ++ zum Ersetzen Ctrl+ H, um das Menü Ersetzen zu öffnen.

Wenn Sie dann die Schaltfläche "Regulärer Ausdruck" aktivieren und in Ihrem Ersatz einen Teil Ihres übereinstimmenden Musters verwenden möchten, müssen Sie "Gruppen erfassen" verwenden (lesen Sie mehr bei Google ). Angenommen, Sie möchten mit jeder der folgenden Zeilen übereinstimmen

value="4"
value="403"
value="200"
value="201"
value="116"
value="15"

mit dem .*"\d+"Muster und möchte nur die Nummer behalten. Sie können dann eine Erfassungsgruppe in Ihrem übereinstimmenden Muster verwenden, indem Sie Klammern verwenden (und )wie folgt : .*"(\d+)". Jetzt können Sie in Ihrem Ersatz einfach schreiben $1, wobei 1 US-Dollar auf den Wert der ersten Erfassungsgruppe verweist und die Nummer für jedes erfolgreiche Spiel zurückgibt. Wenn Sie beispielsweise zwei Erfassungsgruppen hatten (.*)="(\d+)", $1wird die Zeichenfolge valueund $2die Nummer zurückgegeben.

Also mit:

Finden: .*"(\d+)"

Ersetzen: $1

Es wird dich zurückbringen

4
403
200
201
116
15

Bitte beachten Sie, dass es viele alternative und bessere Möglichkeiten gibt, das oben genannte Muster abzugleichen. Zum Beispiel wäre das Muster value="([0-9]+)"besser, da es spezifischer ist und Sie sicher sind, dass es nur mit diesen Linien übereinstimmt. Es ist sogar möglich, den Ersatz ohne die Verwendung von Erfassungsgruppen vorzunehmen, aber dies ist ein etwas fortgeschritteneres Thema, also lasse ich es vorerst :)


19
Für den Ersatz $1hat bei mir nicht funktioniert. Ich habe \1stattdessen verwendet und das hat funktioniert.
Jason Wheeler

12
\1Funktioniert in allen Versionen von Notepad ++. $1funktioniert nur in den neueren.
Cullub

Ich vermute, das funktioniert nicht mit dem Hex EditorPlugin. Im Hex-Ansichtsmodus zeigt Notepad ++ die Regular ExpressionOption für Suchen / Ersetzen nicht an. Im Textansichtsmodus wird die Regular ExpressionOption Suchen / Ersetzen angezeigt. Ich verwende Notepad ++ Version 6.9.2, die derzeit die aktuelle Version ist.
Kevin Fegan

15

psxls gab eine großartige Antwort, aber ich denke, meine Notepad ++ - Version ist etwas anders, so dass die Erfassung von $ (Dollarzeichen) nicht funktioniert hat.

Ich habe Notepad ++ v.5.9.3 und hier ist, wie Sie Ihre Aufgabe erfüllen können:

Suchen Sie nach dem Muster: value = "([0-9] *)" und ersetzen Sie es durch: " 1" (was auch immer Sie um diese Erfassungsgruppe herum tun möchten)

Ex. Mit eckigen Klammern umgeben

[\ 1] -> erzeugt value = "[4]"


1
\1Hat mir geholfen, die Nummer zu behalten, aber das Zitat dahinter zu entfernen. Ich hatte ungefähr 7400 Zeilen in einem Dokument wie tablename.columnname = '12345'. Das erste Zitat war leicht zu entfernen, das zweite wurde mit \1dem Textfeld "Ersetzen" erstellt. Vielen Dank, +1
Ben Fransen

6

Ersetzen (.*")\d+(")

Mit $1x$2

Wo xist Ihr "Wert innerhalb der Bereiche".


0

Ich habe Notepad ++ v6.8.8

Finden Sie : [([a-zA-Z])]

Ersetzen : [\ '\ 1 \']

Erzeugt: $ array [XYZ] => $ array ['XYZ']


-3

Finden: value="([\d]+|[\d])"

Ersetzen: \1

Es wird dich wirklich zurückbringen

4
403
200
201
116
15

js:

a='value="4"\nvalue="403"\nvalue="200"\nvalue="201"\nvalue="116"\nvalue="15"';
a = a.replace(/value="([\d]+|[\d])"/g, '$1');
console.log(a);

3
In welcher Beziehung steht diese JavaScript-Lösung zu der Frage, die mit Notepad ++ markiert wurde?
Jason Aller

In welcher Beziehung stehen fehlerhafte, fehlerhafte Antworten 1 und 2 zu der Frage, die mit Notepad ++ markiert wurde?
user3178007

Warum habe ich die Frage hier gestellt? Weil ich keine Fragen erstellen kann. Weil ich nicht genug Reputationspunktzahl habe.
user3178007

1
Es gibt keine solche Reputationsanforderung, um Fragen zu stellen, wie Sie behaupten - Sie hätten möglicherweise nicht eingeschränkt werden können. Versuchen Sie es erneut: stackoverflow.com/questions/ask
BoltClock

Die Frage wurde gestellt. stackoverflow.com/questions/24112018/… Aber nur in wenigen Worten zu suchen. Einschränkung ist!
user3178007
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.