Найти и заменить - Добавить возврат каретки ИЛИ Newline

183

В случае следующей строки для анализа.

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

Я хочу , чтобы заменить ~~?сcarriage return

Замена \nпросто добавляет строку"\n"

Как это может быть сделано?

Mantisimo
источник

Ответы:

272

Убедитесь, что в диалоговом окне «Найти и заменить» выбрано «Использовать: Регулярные выражения»:

Найти / заменить диалог Использовать регулярные выражения

Обратите внимание, что для Visual Studio 2010 это не работает в расширении «Быстрый поиск» Visual Power Productivity Power Tools (по состоянию на обновление июля 2011 года); вместо этого вам нужно использовать полный диалог «Найти и заменить» (используйте Ctrl + Shift + H или «Правка» -> «Найти и заменить -> Заменить в файлах») и измените область действия на «Текущий документ».

Мартин
источник
5
Использование кнопки «Воспроизвести» справа от текста «Найти» также удобно
Cel
3
и если вы пытаетесь сопоставить специальные символы, такие как скобки, не забудьте использовать, например, \)когда включены регулярные выражения ...
Cel
2
Символ ?должен быть экранирован в Regex, потому что это означает, что предыдущий элемент является необязательным. Таким образом, правильный текст «Найди, что» ~~\?с вопросительным знаком, экранированным обратной косой чертой. Ответ, который вы дали, работает с образцом текста, потому что он жадно найдет вторую тильду и поглотит ее, однако, если в тексте также есть где-то одна тильда, она также будет неправильно заменена новой строкой.
ErikE
Если установлены Productivity Power Tools, вы все равно можете выполнить ctrl + shit + h, а затем ctrl + h, чтобы открыть собственное окно Visual Studio Find / Replace.
Neb
Следует отметить, что если выбрано «Использовать регулярные выражения», можно также использовать «\ n» для поиска (и замены) новых строк.
Джейкоб Локард
28

Вы также можете попробовать \x0d\x0aустановить флажок «Заменить на», установив флажок «Использовать регулярное выражение», чтобы получить возврат каретки + перевод строки с помощью Visual Studio Find / Replace. Использование \n(перевод строки) аналогично\x0a

декан
источник
13

Если вы установите флаг «Использовать регулярные выражения», тогда \ n будет переведен. Но имейте в виду, что вам нужно изменить поисковый запрос, чтобы быть удобным для регулярных выражений. В вашем случае это должно быть экранировано, как это "\ ~ \ ~ \?" (без кавычек).

detunized
источник
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. XOXOXOXOXOXOXOXO\nHUHUHUHU(регулярное выражение на ).
  3. XOXOXOXOpublic IFoo Foo { get { return this.MyFoo; } }(регулярное выражение выключено ).
  4. HUHUHUHUpublic IFoo Bar { get { return this.MyBar; } }(регулярное выражение выключено ).
Сюзанна Дюперон
источник
@ Alex Если у вас есть практическое решение этой проблемы, которое позволяет избежать необходимости вручную избегать поиска и замены текста при преобразовании его в регулярные выражения и тратить следующие 10 минут на исправление созданного таким образом монстра, я был бы очень рад услышать это, так как мой ответ просто уродливый взломать. Но, как вы можете видеть, все другие ответы, которые работают на ванильной Visual Studio без дополнительных плагинов, требуют использования регулярных выражений и, следовательно, экранирования простого текста.
Сюзанна Дюперон
2
Я не имел в виду это плохо. Мои извинения я забыл поставить смайлик: D Что касается решения, нет у меня нет такого, который включает VS. Но я обнаружил, что любой достойный внешний редактор, поддерживающий регулярные выражения (notepad ++ и т. Д.), Работает довольно хорошо.
Алекс
2
UltraEdit - король поисковой замены - здесь вы ищете новые строки, разрывы строк или что-то еще, просто пометив эти строки и запустив поиск. - Что касается замены, просто введите ^ n для \ n, ^ r для \ r и ^ t для \ t - если бы только VS2010 сделал то же самое :-)
Miros
Вы всегда можете посетить regex101.com, чтобы увидеть, будет ли строка поиска соответствовать буквальным символам или интерпретироваться как управляющие символы Regex.
ErikE
7

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

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

Питер Масей
источник
Похоже, не работает с Visual Studio 2017 без каких-либо дополнительных шагов, то есть нужно нажать «найти в файлах», а затем изменить область диалоговых окон, ярлык по умолчанию теперь f # интерактивный.
Марк Шультхайс