Znajdź i zamień - dodaj zwrot karetki LUB nowy wiersz

183

W przypadku następującego ciągu do przeanalizowania.

ford mustang,10,blue~~?bugatti veyron,13,black

Chcę zastąpić ~~?zcarriage return

Zamieniając na \npo prostu dodaje ciąg"\n"

Jak można to zrobić?

Mantisimo
źródło

Odpowiedzi:

272

Upewnij się, że w oknie dialogowym Znajdź i zamień wybrano opcję „Użyj: wyrażenia regularne”:

Okno dialogowe Znajdź / zamień Użyj wyrażeń regularnych

Uwaga: w przypadku programu Visual Studio 2010 nie działa to w rozszerzeniu „Szybkie wyszukiwanie” programu Visual Studio Productivity Power Tools (od aktualizacji z lipca 2011 r.); zamiast tego musisz użyć pełnego okna dialogowego Znajdź i zamień (użyj Ctrl + Shift + H lub Edytuj -> Znajdź i zamień -> Zamień w plikach) i zmień zakres na „Bieżący dokument”.

Jaskółka oknówka
źródło
5
przydatny jest także przycisk „Odtwórz” po prawej stronie tekstu Znajdź
Cel
3
a jeśli próbujesz dopasować znaki specjalne, takie jak nawiasy, nie zapomnij użyć np. \)gdy wyrażenia regularne są włączone ...
Cel
2
?Postać musi być uciekł w Regex, ponieważ oznacza, że poprzedni element jest opcjonalny. Zatem poprawny tekst „Znajdź, co” ~~\?, ze znakiem zapytania poprzedzonym odwrotnym ukośnikiem. Odpowiedź, którą podałeś, działa na przykładowym tekście, ponieważ zachłannie znajdzie drugą tyldę i zużyje ją, jednak jeśli tylda istnieje również w tekście w dowolnym miejscu, zostanie również nieprawidłowo zastąpiona nową linią.
ErikE
Jeśli zainstalowane są Narzędzia produktywności, nadal możesz zrobić ctrl + shit + h, a następnie ctrl + h, aby otworzyć natywne okno Znajdź / Zamień Visual Studio.
Neb
Należy zauważyć, że jeśli wybrano „Użyj wyrażeń regularnych”, można także użyć „\ n”, aby znaleźć (i zastąpić) nowe wiersze.
Jacob Lockard
28

Możesz także spróbować \x0d\x0aw polu „Zamień na” z zaznaczonym polem „Użyj wyrażenia regularnego”, aby uzyskać powrót karetki + przejście do wiersza za pomocą Visual Studio Find / Replace. Używanie \n(wysuw wiersza) jest takie samo jak\x0a

Dziekan
źródło
13

Jeśli ustawisz flagę „Użyj wyrażeń regularnych”, \ n zostanie przetłumaczony. Pamiętaj jednak, że musisz zmodyfikować wyszukiwane hasło, aby było przyjazne dla wyrażeń regularnych. W twoim przypadku powinno się uciec w ten sposób „\ ~ \ ~ \?” (bez cytatów).

rozpoznany
źródło
3
„~” nie wymaga ucieczki w Regex. To dosłowna postać. To jest niepoprawne.
ErikE,
12

Jeśli chcesz uniknąć kłopotów ze znakami specjalnymi podczas wyszukiwania i zamiany ciągu podczas używania wyrażeń regularnych, wykonaj następujące czynności:

  1. Wyszukaj oryginalny ciąg i zamień go na „UniqueString42” przy wyłączonych wyrażeniach regularnych .
  2. Wyszukaj „UniqueString42” i zamień go na „UniqueString42 \ nUniqueString1337” z wyrażeniami regularnymi na
  3. Wyszukaj „UniqueString42” i zastąp go pierwszym wierszem zamiennika (często oryginalnym ciągiem), z wyłączonymi wyrażeniami regularnymi .
  4. Wyszukaj „UniqueString42” i zastąp go drugim wierszem zamienionego tekstu, z wyłączonymi wyrażeniami regularnymi .

Pamiętaj, że nawet jeśli chcesz ręcznie dopasować dopasowania dla pierwszego wyszukiwania i zamienić, możesz bezpiecznie użyć opcji „zamień wszystko” dla trzech ostatnich kroków.

Przykład

Na przykład, jeśli chcesz to zastąpić:

public IFoo SomeField { get { return this.SomeField; } }

z tym:

public IFoo Foo { get { return this.MyFoo; } }
public IBar Bar { get { return this.MyBar; } }

Dokonałbyś następujących zmian:

  1. public IFoo SomeField { get { return this.SomeField; } }XOXOXOXO(regex wyłączony ).
  2. XOXOXOXOXOXOXOXO\nHUHUHUHU(regex on ).
  3. XOXOXOXOpublic IFoo Foo { get { return this.MyFoo; } }(regex wyłączony ).
  4. HUHUHUHUpublic IFoo Bar { get { return this.MyBar; } }(regex wyłączony ).
Suzanne Dupéron
źródło
@Alex Jeśli masz praktyczne rozwiązanie tego problemu, który pozwala uniknąć konieczności ręcznego opuszczania wyszukiwania i zastępowania tekstu podczas przekształcania go w wyrażenia regularne i spędzania kolejnych 10 minut na naprawianiu stworzonego w ten sposób potwora, bardzo się cieszę, że słyszę to, ponieważ moja odpowiedź to po prostu brzydki hack. Ale jak widać, wszystkie inne odpowiedzi, które działają w waniliowym Visual Studio bez dodatkowych wtyczek, wymagają użycia wyrażeń regularnych, a tym samym unikania prostego tekstu.
Suzanne Dupéron
2
Nie miałem tego na myśli w zły sposób. Przepraszam, zapomniałem umieścić buźkę: D Jeśli chodzi o rozwiązanie, nie, nie mam takiego, który dotyczy VS. Ale zauważyłem, że każdy przyzwoity edytor zewnętrzny, który obsługuje regex (notatnik ++ itp.) Działa całkiem dobrze.
Alex
2
UltraEdit jest królem wyszukiwania zamień - tutaj wyszukujesz znaki nowej linii, podziały linii lub cokolwiek innego, po prostu zaznaczając te linie i rozpoczynając wyszukiwanie. - Jeśli chodzi o zamianę, możesz wpisać ^ n dla \ n, ^ r dla \ ri ^ t dla \ t - jeśli tylko VS2010 zrobiłby to samo :-)
Miros
Zawsze możesz odwiedzić stronę regex101.com, aby sprawdzić, czy szukany ciąg będzie pasować do literałów lub czy zostanie zinterpretowany jako znaki kontrolne Regex.
ErikE,
7

Możesz użyć funkcji Multiline Search and Replace w makrze Visual Studio, które zapewnia ładne GUI dla zadania.

wprowadź opis zdjęcia tutaj

Peter Macej
źródło
Wydaje się, że nie działa z Visual Studio 2017 bez dodatkowych kroków, tj. Trzeba kliknąć „znajdź w plikach”, a następnie zmodyfikować zakres okien dialogowych, domyślny skrót jest teraz interaktywny.
Mark Schultheiss