/ / REGEX Visual Studio 2013 finden und ändern - Regex, Visual-Studio-2013

REGEX Visual Studio 2013 finden und ändern - Regex, Visual-Studio-2013

Ich möchte die Benennung meiner Klassennamen und Methoden in Tests ändern. Es gibt Hunderte von ihnen, sie sind sehr lang und schwer zu lesen. Unterstriche werden helfen.

Ich habe REGEX erstellt:

(public class [A-Z][a-z]*(_[A-Z][a-z]*)*)(?<x>[A-Z])

Muster ersetzen: $1_${x}

das gibt mein Beispiel: Von: public class VeryLongClassNameTestScenarioTwentySeven

Zu: public class Very_LongClassNameTestScenarioTwentySeven

Nächste Verwendung: public class Very_Long_ClassNameTestScenarioTwentySeven

Nächste Verwendung: public class Very_Long_Class_NameTestScenarioTwentySeven

Nach mehrmaliger Verwendung sollten alle Namen geändert werden. Kannst du mir helfen, einen regulären Ausdruck zu finden, der das sofort macht?

Ich nehme an, dass reguläre Ausdrücke in VS die Konvertierung von Groß- in Kleinbuchstaben nicht unterstützen.

Vielen Dank

Antworten:

1 für die Antwort № 1

Ich habe momentan keinen Zugriff auf meine VS-Workstation, denke aber Folgendes sollte Arbeit:

Finden: (?<=public class .*?)([a-z])([A-Z])

Ersetzen mit: $1_$2

(Ich habe es getestet http://regexstorm.net/tester )


Bearbeiten: Jetzt, wo ich vor meiner VS-Workstation sitze, ist hier das Ergebnis meiner Tests:

Es "Arten" arbeiten ... seltsam, mit dem folgenden Code:

public class ThisIsLongClassName
{ }

public class AnotherLongClassName
{ }

public class WhoaThisNameIsEvenLonger
{ }

Jetzt testen mit Verschiebung+Strg+F:

  • Wenn ich "Find Next" mache, dann richtig Sprünge zwischen den Orten, wo Substitutionen sollte stattfinden. Also ist die Regex korrekt.
  • Wenn ich jedoch auf "Ersetzen" geklickt habe, Er ersetzt die Zeile unter der hervorgehobenen Zeile. Zum Beispiel ist der Höhepunkt an sI in der ersten Zeile geschieht die Änderung an rL des zweite Linie
  • Wenn Sie schließlich auf "Alle ersetzen" klicken, wird nichts unternommen

Ich denke VS2013 ist b0rked. Zumindest meiner ist.


Bearbeiten 2: Also empfehle ich dir, ein kleines Programm zu erstellen und es durch deine Dateien laufen zu lassen. Wird viel einfacher Regex, da alles, was Sie tun müssen, ist sicherzustellen, dass die .TrimStart()Zeile beginnt mit "public class", dann tust du einen einfachen Regex-Ersatz von ([a-z])([A-Z]) mit $1_$2 auf dieser Linie.