/ / REGEX Visual Studio 2013 znajdź i zmień - regex, visual-studio-2013

REGEX Visual Studio 2013 znajdź i zmień - regex, visual-studio-2013

Chcę zmienić nazewnictwo moich nazw klas i metod w testach. Są ich setki, są bardzo długie i trudne do odczytania. Podkreślenia pomogą.

Stworzyłem REGEX:

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

Zastąp wzór: $1_${x}

to daje mój przykład: Z: public class VeryLongClassNameTestScenarioTwentySeven

Do: public class Very_LongClassNameTestScenarioTwentySeven

Następne użycie: public class Very_Long_ClassNameTestScenarioTwentySeven

Następne użycie: public class Very_Long_Class_NameTestScenarioTwentySeven

Po użyciu wiele razy wszystkie nazwy powinny zostać zmienione. Czy możesz pomóc mi znaleźć wyrażenie regularne, które zrobi to od razu?

Przypuszczam, że wyrażenia regularne w VS nie obsługuje konwersji litery z górnej, na małe litery?

Dzięki

Odpowiedzi:

1 dla odpowiedzi № 1

Nie mam teraz dostępu do mojej stacji roboczej VS, ale myślę, że następujące powinien praca:

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

Zamienić: $1_$2

(Testowałem dalej http://regexstorm.net/tester )


Edytować: Teraz, gdy siedzę przed moją stacją roboczą VS, oto wynik moich testów:

To "rodzaje" pracy ... o dziwo, z następującym kodem:

public class ThisIsLongClassName
{ }

public class AnotherLongClassName
{ }

public class WhoaThisNameIsEvenLonger
{ }

Teraz testuj z Przesunięcie+Ctrl+fa:

  • Jeśli zrobię "Znajdź następny", to prawidłowo przeskakuje pomiędzy lokalizacjami, w których znajdują się substytucje powinien zająć miejsce. Więc wyrażenie regularne jest poprawne.
  • Jednak po kliknięciu "Zamień", zastępuje linię pod podświetlaną linią. Np. Najważniejsze jest sI pierwszej linii, zmiana się dzieje rL z druga linia
  • Na koniec kliknięcie "Zamień wszystko" nic nie robi

Myślę, że VS2013 jest b0rked. Przynajmniej moje jest.


Edytuj 2: Polecam więc utworzyć mały program i pozwolić mu "przejrzeć" pliki. Będzie znacznie prostsze wyrażenie regularne, ponieważ wszystko, co musisz zrobić, to upewnić się, że .TrimStart()-ed line zaczyna się od "public class", następnie wykonaj proste zastępowanie wyrażenia regularnego ([a-z])([A-Z]) z $1_$2 w tej linii.