it-swarm.com.de

Suche nach regulären Ausdrücken in Sublime Text 2 ersetzen

Ich bin auf der Suche nach Ersetzen durch reguläre Ausdrücke in Sublime Text 2. Die Dokumentation hierz ist eher anämisch. Konkret möchte ich ein Ersetzen für Gruppen durchführen, also so etwas wie diesen Text konvertieren:

Hello my name is bob

Und dieser Suchbegriff:

Finde was: my name is (\w)+

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

Der Suchbegriff funktioniert einwandfrei, aber ich kann keinen Weg finden, ein Ersetzen mithilfe der regulären Ausdrucksgruppe durchzuführen.

414
hackerhasid

Normalerweise ist ein Rückverweis entweder $1 oder \1 (umgekehrter Schrägstrich) für die erste Erfassungsgruppe (die erste Übereinstimmung eines Musters in Klammern). Also vielleicht versuchen:

my name used to be \1

oder

my name used to be $1

PDATE: Wie mehrere Personen bereits betont haben, ist Ihr ursprüngliches Erfassungsmuster falsch und erfasst nur den letzten Buchstaben des Namens und nicht den gesamten Namen. Sie sollten das folgende Muster verwenden, um alle Buchstaben des Namens zu erfassen:

my name is (\w+)
550
Bobulous

Übrigens in der Frage oben:

Zum:

Hello, my name is bob

Teil finden:

my name is (\w)+

Mit Ersatzteil:

my name used to be \1

Würde zurückkehren:

Hello, my name used to be b

Ändern Sie das Suchteil in:

my name is (\w+)

Und ersetzen wird, was Sie erwarten:

Hello, my name used to be bob

Während (\ w) + mit "bob" übereinstimmt, ist es nicht die Gruppierung, die Sie ersetzen möchten.

101
CrnaStena

Verwenden Sie die Klammern () in Ihrer Suchzeichenfolge

Es gibt eine wichtige Sache zu betonen! Alle übereinstimmenden Segmente in Ihrer Suchzeichenfolge, die Sie in Ihrer Ersatzzeichenfolge verwenden möchten, müssen von () Klammern umschlossen sein, andernfalls sind diese übereinstimmenden Segmente kann nicht mit Variablen wie $ 1, $ 2, ... oder\1,\2, .. und etc. erreicht werden.

BEISPIEL:

Wir wollen 'em' durch 'px' ersetzen, aber die Zahlenwerte beibehalten:

margin: 10em
margin: 2em

Wir verwenden also den margin: $1px als Ersatzzeichenfolge.


RICHTIG: Umfassen Sie das gewünschte $1 übereinstimmende Segment mit ( ) Klammern wie folgt:

FIND: margin: ([0-9]*)em (Mit Klammern)

ERSETZEN SIE: margin: $1px

ERGEBNIS:

margin: 10px
margin: 2px

FALSCH: Das folgende Regex-Muster stimmt mit den gewünschten Zeilen überein, aber übereinstimmende Segmente sind in ersetzten Zeichenfolgen als Variablen wie $1 nicht verfügbar:

FIND: margin: [0-9]*em (ohne Klammern)

ERSETZEN SIE: margin: $1px

ERGEBNIS: ($1 ist undefiniert)

margin: px
margin: px
46
Hrvoje Golcic

Hier ist eine visuelle Darstellung der genehmigten Antwort.

enter image description here

44
zeeawan

Beachten Sie, dass Sie bei Verwendung von mehr als 9 Erfassungsgruppen die Syntax ${10} verwenden müssen.

$10 oder \10 oder \{10} funktionieren nicht.

21

Wenn Sie sich Artikel der Sublime Text Inofficial Documentation über Suchen und Ersetzen ansehen, sieht es so aus, als ob +(.+) die Erfassungsgruppe ist, die Sie möchten ... aber ich persönlich habe (.*) verwendet und es hat gut funktioniert . Um in der Art, wie Sie sagen, ZU ERSETZEN, könnte Ihnen dies gefallen Konversation in den Foren , insbesondere dieser Beitrag , in dem es heißt, einfach $1 zu verwenden, um das erste erfasste zu verwenden Gruppe.

Und da Bilder besser sind als Worte ...

Vorher: before find/replace

Nach: after find/replace

1
Blairg23