Suchen und ersetzen - Wagenrücklauf ODER Zeilenumbruch hinzufügen

182

Im Falle der folgenden zu analysierenden Zeichenfolge.

ford mustang,10,blue~~?bugatti veyron,13,black

Ich möchte das ~~?durch ein ersetzencarriage return

Durch Ersetzen durch wird \nnur die Zeichenfolge hinzugefügt"\n"

Wie kann das gemacht werden?

Mantisimo
quelle

Antworten:

271

Stellen Sie sicher, dass im Dialogfeld Suchen und Ersetzen die Option "Verwenden: Reguläre Ausdrücke" ausgewählt ist:

Dialogfeld "Suchen / Ersetzen" Verwenden Sie reguläre Ausdrücke

Beachten Sie, dass dies für Visual Studio 2010 in der Erweiterung "Quick Find" von Visual Studio Productivity Power Tools nicht funktioniert (Stand: Update Juli 2011). Stattdessen müssen Sie das vollständige Dialogfeld "Suchen und Ersetzen" verwenden (Strg + Umschalt + H oder Bearbeiten -> Suchen und Ersetzen -> In Dateien ersetzen) und den Bereich in "Aktuelles Dokument" ändern.

Martin
quelle
5
Die Verwendung der Schaltfläche "Abspielen" rechts neben dem Text "Suchen" ist ebenfalls praktisch
Cel
3
und wenn Sie versuchen, Sonderzeichen wie Klammern zuzuordnen, vergessen Sie nicht, diese zu verwenden, z. B. \)wenn reguläre Ausdrücke
Cel
2
Das ?Zeichen muss in Regex maskiert werden, da dies bedeutet, dass das vorherige Element optional ist. Somit ist der richtige "Find what" -Text ~~\?, wobei das Fragezeichen durch einen Backslash gekennzeichnet ist. Die Antwort, die Sie gegeben haben, funktioniert mit dem Beispieltext, da er die zweite Tilde gierig findet und verbraucht. Wenn jedoch irgendwo eine einzelne Tilde im Text vorhanden ist, wird sie auch nicht ordnungsgemäß durch eine neue Zeile ersetzt.
ErikE
Wenn Productivity Power Tools installiert ist, können Sie weiterhin Strg + Scheiße + H und dann Strg + H ausführen, um das native Visual Studio-Fenster Suchen / Ersetzen zu öffnen.
Neb
Es ist zu beachten, dass bei Auswahl von "Reguläre Ausdrücke verwenden" auch "\ n" zum Suchen (und Ersetzen) von Zeilenumbrüchen verwendet werden kann.
Jacob Lockard
28

Sie können auch versuchen, \x0d\x0aim Feld "Ersetzen durch" das Kontrollkästchen "Regulären Ausdruck verwenden" zu aktivieren, um mithilfe von Visual Studio Suchen / Ersetzen Wagenrücklauf + Zeilenvorschub zu erhalten. Die Verwendung von \n(Zeilenvorschub) ist dieselbe wie\x0a

Dean
quelle
13

Wenn Sie das Flag "Reguläre Ausdrücke verwenden" setzen, wird \ n übersetzt. Beachten Sie jedoch, dass Sie Ihren Suchbegriff ändern müssen, um regexp-freundlich zu sein. In Ihrem Fall sollte es wie folgt maskiert werden: "\ ~ \ ~ \?" (keine Anführungszeichen).

verstimmt
quelle
3
'~' muss in Regex nicht maskiert werden. Es ist ein wörtlicher Charakter. Das ist falsch.
ErikE
12

Führen Sie die folgenden Schritte aus, wenn Sie vermeiden möchten, dass die Sonderzeichen in Ihrer Such- und Ersatzzeichenfolge bei der Verwendung regulärer Ausdrücke nicht berücksichtigt werden:

  1. Suchen Sie Ihren ursprünglichen Zeichenfolge, und ersetzen Sie es mit „UniqueString42“, mit regulären Ausdrücken aus .
  2. Suche nach „UniqueString42“ und ersetzen es durch „UniqueString42 \ nUniqueString1337“, mit regulären Ausdrücken auf
  3. Suchen Sie nach "UniqueString42" und ersetzen Sie es durch die erste Zeile Ihres Ersatzes (häufig Ihre ursprüngliche Zeichenfolge), wobei reguläre Ausdrücke deaktiviert sind .
  4. Suche nach „UniqueString42“ und ersetzen Sie es mit der zweiten Zeile des Ersatzes, mit regulären Ausdrücken aus .

Beachten Sie, dass Sie, selbst wenn Sie Übereinstimmungen für das erste Suchen und Ersetzen manuell pichen möchten, für die drei letzten Schritte sicher "Alle ersetzen" verwenden können.

Beispiel

Wenn Sie dies beispielsweise ersetzen möchten:

public IFoo SomeField { get { return this.SomeField; } }

damit:

public IFoo Foo { get { return this.MyFoo; } }
public IBar Bar { get { return this.MyBar; } }

Sie würden die folgenden Ersetzungen vornehmen:

  1. public IFoo SomeField { get { return this.SomeField; } }XOXOXOXO(Regex aus ).
  2. XOXOXOXOXOXOXOXO\nHUHUHUHU(Regex ein ).
  3. XOXOXOXOpublic IFoo Foo { get { return this.MyFoo; } }(Regex aus ).
  4. HUHUHUHUpublic IFoo Bar { get { return this.MyBar; } }(Regex aus ).
Suzanne Dupéron
quelle
@Alex Wenn Sie eine praktische Lösung für dieses Problem haben, bei der Sie nicht manuell aus Ihrer Suche entkommen und Text ersetzen müssen, wenn Sie ihn in reguläre Ausdrücke umwandeln, und die nächsten 10 Minuten damit verbringen, das so erstellte Monster zu reparieren, würde ich mich sehr freuen, das zu hören es, da meine Antwort nur ein hässlicher Hack ist. Wie Sie jedoch sehen können, erfordern alle anderen Antworten, die in einem Vanilla Visual Studio ohne zusätzliche Plug-Ins funktionieren, die Verwendung regulärer Ausdrücke und damit das Entkommen von einfachem Text.
Suzanne Dupéron
2
Das habe ich nicht schlecht gemeint. Ich entschuldige mich dafür, dass ich vergessen habe, einen Smiley zu setzen: D Was eine Lösung betrifft, nein, ich habe keine, die VS betrifft. Aber ich fand, dass jeder anständige externe Editor, der Regex unterstützt (Notepad ++ usw.), ziemlich gut funktioniert.
Alex
2
UltraEdit ist der König der Suchersetzung - hier suchen Sie nach Zeilenumbrüchen, Zeilenumbrüchen oder was auch immer, indem Sie diese Zeilen markieren und die Suche starten. - Als Ersatz geben Sie einfach ^ n für \ n, ^ r für \ r und ^ t für \ t ein - wenn nur VS2010 dasselbe tun würde :-)
Miros
Sie können jederzeit regex101.com besuchen, um festzustellen , ob Ihre Suchzeichenfolge mit Literalzeichen übereinstimmt oder als Regex-Steuerzeichen interpretiert wird.
ErikE
7

Sie können das mehrzeilige Suchen und Ersetzen im Visual Studio-Makro verwenden, das eine schöne Benutzeroberfläche für die Aufgabe bietet.

Geben Sie hier die Bildbeschreibung ein

Peter Macej
quelle
Scheint mit Visual Studio 2017 ohne einige zusätzliche Schritte nicht zu funktionieren, dh Sie müssen auf "In Dateien suchen" klicken und dann den Bereich des Dialogfelds ändern. Die Standardverknüpfung ist jetzt f # interaktiv.
Mark Schultheiss