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 № 1Ich 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 anrL
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.