Знайти та замінити - Додати повернення перевезення АБО Новий рядок


183

У разі наступного рядка для розбору

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

Я хочу , щоб замінити ~~?зcarriage return

Заміна \nпросто додає рядок"\n"

Як це можна зробити?

Відповіді:


272

Переконайтесь, що в діалоговому вікні "Знайти та замінити" вибрано "Використовувати: регулярні вирази":

Діалог "Знайти / замінити" Використовувати регулярні вирази

Зауважте, що для Visual Studio 2010 це не працює в розширенні "Швидкий пошук" для Visual Studio Productivity Studio (станом на оновлення липня 2011 року); натомість вам потрібно буде використовувати повне діалогове вікно "Знайти та замінити" (використовувати Ctrl + Shift + H або Редагувати -> Знайти та замінити -> Замінити у файлах) та змінити область на "Поточний документ".


5
також зручно скористатися кнопкою "Відтворити" праворуч від тексту Знайти
— Cel

3
і якщо ви намагаєтеся відповідати спеціальним символам, таким як дужки, не забувайте використовувати, наприклад, \)коли регулярні вирази включені ...
— Cel

2
У ?Regex символу потрібно уникати, оскільки він означає, що попередній елемент необов'язковий. Таким чином, правильний текст "Знайди що" ~~\?, із знаком питання, уникнутим зворотним нахилом. Відповідь, яку ви дали, працює над зразковим текстом, тому що він жадібно знайде другий тильд і споживає його, однак, якщо один текст може бути в тексті де завгодно, він також буде неправильно замінений на новий рядок.
— ErikE

Якщо встановлено Power Tools Power Tools, ви все одно можете виконати ctrl + shit + h, а потім ctrl + h, щоб відкрити вікно візуального пошуку / заміни Visual Studio.
— Неб

Слід зазначити, що якщо вибрано "Використовувати регулярні вирази", можна також використовувати "\ n" для пошуку (та заміни) нових рядків.
— Джейкоб Локард

28

Ви також можете спробувати \x0d\x0aу полі "Замінити" на "Використовувати регулярне вираження", щоб встановити повернення каретки + канал каналів за допомогою пошуку / заміни Visual Studio. Використання \n(лінія каналу) те саме, що\x0a


13

Якщо встановити прапор "Використовувати регулярні вирази", \ n буде переведено. Але майте на увазі, що вам доведеться змінити пошуковий термін, щоб він був зручним для регулярних викидів. У вашому випадку його слід уникати так "\ ~ \ ~ \?" (без лапок).


3
'~' не потрібно уникати в Regex. Це буквальний характер. Це неправильно.
— ErikE

12

Якщо ви хочете уникнути клопоту щодо уникнення спеціальних символів у рядку пошуку та заміни, використовуючи регулярні вирази, виконайте наступні дії:

  1. Пошук початкового рядка, і замінити його на «UniqueString42», з регулярними виразами вихідних .
  2. Шукайте "UniqueString42" та замініть його на "UniqueString42 \ nUniqueString1337", з регулярними виразами на
  3. Шукайте "UniqueString42" та замініть його першим рядком вашої заміни (найчастіше оригінальним рядком), виключаючи регулярні вирази .
  4. Шукайте "UniqueString42" та замініть його другим рядком вашої заміни, виключаючи регулярні вирази .

Зауважте, що навіть якщо ви хочете вручну підбирати відповідність для першого пошуку та заміни, ви можете сміливо використовувати "замінити всі" для трьох останніх кроків.

Приклад

Наприклад, якщо ви хочете замінити це:

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

З цим:

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

Ви будете робити такі заміни:

  1. public IFoo SomeField { get { return this.SomeField; } }→ XOXOXOXO( вимкнення зворотного виразу ).
  2. XOXOXOXO→ XOXOXOXO\nHUHUHUHU(повторне вираження увімкнено ).
  3. XOXOXOXO→ public IFoo Foo { get { return this.MyFoo; } }( вимкнення зворотного виразу ).
  4. HUHUHUHU→ public IFoo Bar { get { return this.MyBar; } }( вимкнення зворотного виразу ).

@Alex Якщо у вас є практичне рішення цієї проблеми, яке дозволяє уникнути необхідності вручну уникати пошуку та замінювати текст, перетворюючи його на звичайні вирази, і витрачати наступні 10 хвилин на виправлення створеного таким чином монстра, я буду дуже радий почути це, оскільки моя відповідь - просто потворний злом. Але, як бачите, всі інші відповіді, які працюють у ванільній Visual Studio без додаткових плагінів, вимагають використання регулярних виразів і, таким чином, уникнути простого тексту.
— Сюзанна Дюперон

2
Я не мав на увазі це погано. Мої вибачення я забув поставити смайлик: D Що стосується рішення, у мене немає такого, що передбачає VS. Але я виявив, що будь-який гідний зовнішній редактор, який підтримує регулярний вираз (блокнот ++ тощо), працює досить добре.
— Олексій

2
UltraEdit - король пошуку заміни - тут ви шукаєте нові рядки, рядки або що завгодно, просто позначивши ці рядки та розпочавши пошук. - Щодо заміни ви simpy введіть ^ n для \ n, ^ r для \ r і ^ t для \ t - якби тільки VS2010 зробив би те саме :-)
— Miros

Ви завжди можете відвідати regex101.com, щоб побачити, чи буде ваша пошукова рядок збігатися з буквальними символами чи інтерпретуватись як символи керування Regex.
— ErikE

7

Ви можете використовувати багаторядковий пошук і заміну в макросі Visual Studio, який забезпечує приємний графічний інтерфейс для виконання завдання.

введіть тут опис зображення


Здається, не працює з Visual Studio 2017 без додаткових кроків, тобто потрібно натиснути кнопку "знайти у файлах", а потім змінити область діалогового діалогу.
— Марк Шультейс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.