W jaki sposób odwołujesz się do grupy przechwytywania za pomocą wyrażenia regularnego znajdź i zamień w Visual Studio 2012, 2013, 2015 i VS Code

254

Zdaję sobie sprawę, że jest mnóstwo pytań na ten temat, ale żadne z nich nie odnosiło się konkretnie do wersji VS, do której się odwoływały. Przy braku tych ważnych informacji nadal nie mogłem z powodzeniem korzystać z odpowiedzi, które znalazłem. Najczęstszy był

  • Surround z {}, przechwytywanie obrazu za pomocą \ 1, \ 2, \ n

Jednak wydaje się, że jest to stara metoda wykonywania wyrażenia regularnego znajdowania i zastępowania w programie Visual Studio i nie działa w VS 2012.

SgtPooki
źródło
1
Nie jest to zbyt trudne do znalezienia w pomocy: w oknie dialogowym Wyszukaj / Zamień, F1; na początku wyszukiwania i zastępowania tekstu znajduje się link do Używanie wyrażeń regularnych w VS ; tam druga wskazówka odnosi się do Podstawień w wyrażeniach regularnych ; tam daje podstawy i mówi, że jest więcej szczegółów w Podstawianie grupy numerowanej i Zastępowanie grupy nazwanej .
PJTraill
2
@PJTraill to miło wiedzieć, że ułatwili udzielenie odpowiedzi na pytanie dotyczące ich wersji z 2012 r. Między 2013 a 2015 r. Jednak głosami wydaje mi się dość oczywiste, że znalezienie pomocy nie jest wcale „zbyt trudne”. IMO: Jeśli łatwiej jest wyszukiwać i głosować na artykuł o przepełnieniu stosu, niż używać funkcji znajdowania, zastępowania, przechwytywania bez szukania pomocy, to jest to o wiele trudniejsze niż powinno.
SgtPooki
Jedną z rzeczy, które mnie denerwują w MSVS 2012/3, są dwa różne dialogi Wyszukaj / Zamień, w szczególności mniejszy (Ctrl-H), w którym trzymam się przypadkowo (z naciśnięciami klawiszy prawdopodobnie oznaczającymi coś innego gdzie indziej) zmieniając zakres wyszukiwania . Ale punkt chcę zrobić jest to, że większe (Ctrl-Shift-H) Dialog posiada przyciski po tym Znajdowanie i zamienianie pól, które dają Ci listę ważniejszych możliwości, w tym co szukasz - więc nie zrobić potrzebuję pomocy! Myślę, że wiele osób albo nie zauważa przycisków, albo ląduje w dialogu Ctrl-H i nie może ich zobaczyć.
PJTraill
Zgadzam się, że pomoc jest nieco trudna do znalezienia; Podejrzewam, że nadają priorytet wyszukiwaniu zwykłego tekstu. Chodzi mi bardziej o to, że jeśli ktoś wie lub zakłada, że ​​musi tam być, można go dość łatwo znaleźć; często jednak podążam tą drogą, ponieważ wolę korzystać z dokumentacji kanonicznej, gdy tylko ją znajdę. Nie chciałem brzmieć dyskredytująco; Uważam, że jest to zarówno „zbyt trudne”, jak i „niezbyt trudne” - nie są przeciwieństwami, jeśli postrzegasz „niezbyt” jako kwalifikujące się „trudne” i dodajesz odpowiedź do domyślnego „trudnego na co?”.
PJTraill
„Wiedziałem”, że tagowanie REGEXP używało „()”, ponownie przeczytałem dokumentację i to nie działało… więc przyszedłem tutaj, aby się upewnić… potem przeprowadziłem trochę eksperymentów i zadziałało. Zatem IMHO dokumentacja MSDN musi być bardzo jasna, że ​​() są używane do „oznaczenia” wyrażenia, dla tych z nas, którzy musieli nauczyć się starej nomenklatury „znacznika” VS6. Byłoby miło, gdyby mogli użyć tej samej nomenklatury. Grupy ponumerowane ... po prostu nie odpalają synaps wystarczająco dobrze IMHO.
Ross Youngblood

Odpowiedzi:

355

Aby znaleźć i zastąpić w VS 2012 i VS 2015, wykonaj następujące czynności:

Przykład (dzięki syonip)

W opcjach wyszukiwania upewnij się, że opcja „używaj wyrażeń regularnych” jest zaznaczona, a jako tekst wpisz następujące słowa:

_platformActions.InstallApp\((.+)\)

I następujące jako tekst, aby go zastąpić:

this.Platform().App($1).Install()

Uwaga: Jak SLaks wskazuje w komentarzu poniżej, zmiana składni wyrażeń regularnych wynika z przejścia VS2012 na standardowy silnik wyrażeń regularnych .Net.

Uwaga: inny komentator wskazał, że działa to również w programie Visual Studio Code (vscode)

SgtPooki
źródło
10
Mówiąc bardziej ogólnie, VS2012 wykorzystuje teraz standardowy silnik regex .Net.
SLaks,
4
Nie musisz uciekać przed kropką między _platformActionsi InstallApp?
rory.ap
Myśląc o tym teraz, miałoby to sens. Nie testowałem tego. Możesz tam dodać edycję.
SgtPooki
1
Skończyło się na tym, że użyłem nazwanego, ponieważ numeryczna wydaje mi się przynajmniej nie działać. (?<rval>.+)w poszukiwaniu i na zastępstwie${rval}
Mark Schultheiss
2
Dodatkowa pomoc: jeśli chcesz zastąpić rzecz (. *) Rzeczą 18 USD (dodając „8” bezpośrednio po przechwyceniu), musisz użyć rzeczy {1} 8
Luc Bloom
17

Aby dodać przykład tego, oto coś, co musiałem zrobić w kodzie:

Znajdź co:

_platformActions.InstallApp\((.+)\)

Zamienić:

this.Platform().App($1).Install()

Zastępuje to każde wywołanie InstallApp (x) za pomocą this.Platform (). App (x) .Install ().

* Nie zapomnij zaznaczyć opcji „Użyj wyrażeń regularnych” w opcjach Znajdź

syonip
źródło
10

Jeśli chcesz pracować z użyciem nazw grup (używając tej samej próbki jak powyżej):

Znajdź co:

_platformActions\.InstallApp\((?<mygroupname>.+)\)

Zamienić:

this.Platform().App(${mygroupname}).Install()
Yepeekai
źródło
9

Aby poprawić powyższe odpowiedzi: Należy wymienić

_platformActions.InstallApp\((.+)\)

z

this.Platform().App(${1}).Install()

Uważaj na $ {1}, jeśli kiedykolwiek chcesz dodać liczbę za przejęciem. $18spróbuje wstawić 18-tego przechwytywania wyszukiwania, a nie pierwszy z 8dołączonym.

Luc Bloom
źródło