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ć?

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”.


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


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).


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. XOXOXOXO→ XOXOXOXO\nHUHUHUHU(regex on ).
  3. XOXOXOXO→ public IFoo Foo { get { return this.MyFoo; } }(regex wyłączony ).
  4. HUHUHUHU→ public IFoo Bar { get { return this.MyBar; } }(regex wyłączony ).

@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,

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.