494 Stimmen

Reguläre Ausdrücke suchen und ersetzen in Sublime Text 2

Ich möchte in Sublime Text 2 Suchen und Ersetzen mit regulären Ausdrücken durchführen. Die Dokumentation zu diesem Thema ist eher blutarm. Insbesondere möchte ich eine Ersetzung auf Gruppen zu tun, so etwas wie diesen Text zu konvertieren:

Hello my name is bob

Und dieser Suchbegriff:

Was finden: my name is (\w)+

Ersetzen durch: my name used to be $(1)

Der Suchbegriff funktioniert einwandfrei, aber ich finde keine Möglichkeit, mit der Regexp-Gruppe tatsächlich eine Ersetzung vorzunehmen.

659voto

Bobulous Punkte 12601

Normalerweise ist ein Rückverweis entweder $1 o \1 (Backslash one) für die erste Fanggruppe (die erste Übereinstimmung eines Musters in Klammern), und tatsächlich unterstützt Sublime beide Syntaxen. Versuchen Sie es also:

my name used to be \1

o

my name used to be $1

Beachten Sie auch, dass Ihr ursprüngliches Erfassungsmuster:

my name is (\w)+

ist falsch und erfasst nur den letzten Buchstaben des Namens und nicht den ganzen Namen. Sie sollten das folgende Muster verwenden, um alle Buchstaben des Namens zu erfassen:

my name is (\w+)

110voto

CrnaStena Punkte 2809

Übrigens, in der obigen Frage:

Für:

Hello, my name is bob

Teil finden:

my name is (\w)+

Mit Ersatzteil:

my name used to be \1

Würde wiederkommen:

Hello, my name used to be b

Ändern Sie find part in:

my name is (\w+)

Und der Ersatz wird das sein, was Sie erwarten:

Hello, my name used to be bob

Während ( \w )+ wird mit "bob" übereinstimmen, es ist nicht die Gruppierung, die Sie für die Ersetzung wünschen.

77voto

Hrvoje Golcic Punkte 3204

Wichtig: Verwenden Sie die ( ) Klammern in Ihrem Suchbegriff

Die vorherige Antwort ist zwar richtig, aber es gibt einen wichtigen Punkt, den man betonen muss! Alle übereinstimmende Segmente in Ihrem Suchbegriff die Sie in Ihrem Projekt verwenden möchten Ersatzstring muss sein eingeschlossen von ( ) Klammern sonst sind diese übereinstimmenden Segmente nicht für definierte Variablen wie $1 , $2 o \1 , \2 etc.

Wir wollen zum Beispiel "em" durch "px" ersetzen, aber die Ziffernwerte beibehalten:

    margin: 10em;  /* Expected: margin: 10px */
    margin: 2em;   /* Expected: margin: 2px */
  • Ersatzschnur: margin: $1px o margin: \1px
  • Suchbegriff (CORRECT): margin: ([0-9]*)em // mit Klammern
  • Suchbegriff (INCORRECT): margin: [0-9]*em

KORREKTES FALLBEISPIEL: Verwendung von margin: ([0-9]*)em Suchbegriff (mit Klammern). Schließen Sie das gewünschte übereinstimmende Segment ein (z. B. $1 o \1 ) durch ( ) in Klammern wie folgt:

  • Finden: margin: ([0-9]*)em (mit Klammern)
  • Ersetzen durch: margin: $1px o margin: \1px
  • Ergebnis:

    margin: 10px;
    margin: 2px;

FALSCHES FALLBEISPIEL: Verwendung von margin: [0-9]*em Suchbegriff (ohne Klammern). Das folgende Regex-Muster entspricht den gewünschten Zeilen, aber die übereinstimmenden Segmente sind in der ersetzten Zeichenfolge nicht als Variablen verfügbar, z. B. $1 o \1 :

  • Finden: margin: [0-9]*em (ohne Klammern)
  • Ersetzen durch: margin: $1px o margin: \1px
  • Ergebnis:

    margin: px; /* `$1` is undefined */
    margin: px; /* `$1` is undefined */

52voto

zeeawan Punkte 6217

Hier finden Sie eine visuelle Darstellung der genehmigten Antwort.

enter image description here

33voto

Andreas Haferburg Punkte 4913

Beachten Sie, dass Sie, wenn Sie mehr als 9 Erfassungsgruppen verwenden, die folgende Syntax verwenden müssen ${10} .

$10 o \10 o \{10} wird pas Arbeit.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X