2017-02-26 18 views
1

Verwenden von sublime Text Regex finden und ersetzen, wie kann ich das erste Vorkommen einer schließenden Klammer erfassen ]?Entfernen Sie das erste Vorkommen von close Bracket]

Diese Regex funktioniert wie erwartet und fängt mit der ersten Öffnung Halterung nach oben:

^([^\[]*)\[

你_ 你_ [ ni3] Sie (informell, als zu höflich gegen 您 [nin2]) _

Aber diese , für Klammer zu schließen, nicht an, alles:

^([^\]]*)\]


enter image description here

+0

Try '\ A [^]] * \ K]' –

+0

Cou Gibt es Beispiele für gültige und ungültige Strings?Ihre letzte Regex erfasst tatsächlich jede Zeichenfolge, die nicht mit einem "]" beginnt, bis sie ein "]" findet - ist das das erwartete Verhalten? Wenn Ihre Zeichenfolge beispielsweise mit einer schließenden Klammer beginnt, erfasst sie nichts. –

+0

@VictorLiaFook also wie kann ich sicher sein, nur das erste Vorkommen von ']' zu erfassen? Ich habe '^ (\ S *) \]' auch versucht, irgendein nicht whitespace Zeichen zu entsprechen, bis ich erstes Vorkommen von 'finde', aber dieses fängt nichts auch nicht ein – Growler

Antwort

2

Nach Ihrem Screenshot, die ganzes Wort Option aktiviert ist:

enter image description here

Somit ist die ] Sie passen erfordert ein Wort char, nachdem er und das erste Zeichen sollte sein ein Wort char auch.

Eine mögliche Lösung für Sie verwenden nur Deaktivieren der Option.

Wenn Sie jedoch nur/Highlight auswählen müssen/ersetzen/entfernen Sie die erste ] in der Datei, können Sie

\A[^]]*\K] 

verwenden, in denen:

  • \A - den Beginn der Spiele Dokument
  • [^]]* - entspricht 0+ Zeichen außer ]
  • \K - ein Operator zum Zurücksetzen des Matches, der den gesamten Text auslässt, der bisher gefunden wurde
  • ] - entspricht einem Literal ].

Sie brauchen nicht ] außerhalb einer Zeichenklasse zu entkommen, und wenn es das erste Zeichen innerhalb einer Zeichenklasse in PCRE/Boost-regex Geschmack.

enter image description here

Beachten Sie, dass wenn Sie die erste ] in jeder Zeile übereinstimmen müssen, müssen Sie \A mit dem ^ (Zeilenanfang Anker) ersetzen und \r\n dem negierten Zeichenklasse hinzu:

^[^]\r\n]*\K] 

enter image description here

+0

Wiktor muss auf "n" Zeilen mit ähnlicher Struktur angewendet werden. Im Moment passt es nur zu einer Zeile – Growler

+0

Ersetzen Sie '\ A' durch'^'und fügen Sie' \ r \ n' der negierten Zeichenklasse ('^ [^] \ r \ n] * \ K]') hinzu, wenn Sie benötigen um das erste ']' * in jeder Zeile zu finden *. –

Verwandte Themen