Visual Studio – Regular Expression Search And Replace

28. Mai 2015

Refactoring-Tools können zwar viel aber auch nicht alles. Manchmal ist “Search and Replace” die letzte Möglichkeit bevor man Stunden damit verbringt alles von Hand zu ändern.

Bisher hatte ich mich immer davor gescheut reguläre Ausdrücke beim Ersetzen zu verwenden. Wenn ich aber die 10. Datei manuell anpasse, sparen sie mir nicht nur Zeit, sondern machen auch keine Konzentrationsfehler.

Ich nutze sie gern wenn:

  • Die Signatur einer Methode sich ändert (beispielsweise aus 4 Parameter mal ein Struct wird, oder noch einer dazu kommt)
  • Zum Anpassen von vielen Assert in Unittests.

Beispiel:

before

Bei den Prüfungen mit double sollte man aber besser ein Delta angeben, also das Assert anpassen. Im schlimmsten Fall in sehr vielen Testfällen.

after

darum Search and Replace:

searchAndReplace 

Um die passenden Zeilen zu finden reicht der Suchtext1 aus, aber um Teile des Treffertextes zu übernehmen müssen diese geklammert werden wie in Suchtext2. Dann kann man sie beim Ersetzen über $index ansprechen. $0 entspricht dabei dem gesamte gefundenen Treffertextes.

Suchtext1: Assert[.]AreEqual[(][0-9.]*, vDouble[0-9]*[.]Value[)];
Suchtext2: (Assert[.]AreEqual[(][0-9.]*, vDouble[0-9]*[.]Value)([)];)

Weitere Beispiele:

Suchtext: Assert[.]
Ersetzen: // $0
Ergebnis: Zeile wurde auskommentiert

example1 

Suchtext: .*Assert.*/r/n
Ersetzen:
Ergebnis: Zeile wurde entfernt

example2

Suchtext: (.*)(Assert[.]AreEqual[(])([0-9.]*)(, vDouble[0-9]*[.]Value[)];)
Ersetzen: $1double expect = $3;
$1$2expect$4

Ergebnis: eine Zeile wurde hinzugefügt

example3

PS: In älteren Versionen von Visual Studio vor VS 2013 und anderen Editoren können die Zeichen variieren. So muss man in Visual Studio 2010 beispielsweise {} anstatt () im Suchtext und index anstatt $index beim Ersetzen verwenden.