144

Я понимаю, что есть много вопросов об этом, но никто из них, которые я нашел, специально не упоминал, какую версию VS они упомянули. Поскольку этой важной информации не хватало, я все еще не смог успешно использовать полученные ответы. Наиболее распространенным былКак вы ссылаетесь на группу захвата с поиском и заменой регулярных выражений в Visual Studio 2012, 2013 и 2015?

  • Surround с {}, дисплей захвата с \ 1, \ 2, \ п

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

+0

Это не так сложно найти в справке: в диалоге поиска/замены F1; в начале _Finding и замены Text_ есть ссылка на _Using Regular Exions в VS_; там второй отзыв относится к _Substitutions в Regular Expressions_; там он дает вам основы и говорит, что в разделе _Substituting Numbered Group_ и _Substituting Named Group_ содержится более подробная информация. – PJTraill

+0

@PJTraill приятно знать, что они облегчили ответ на вопрос для своей версии 2012 года в период между 2013 и 2015 годами. Тем не менее, по голосам, я думаю, что довольно очевидно, что в помощь по-прежнему не «сложно» найти , ИМО: Если проще найти и проголосовать за статью переполнения стека, чем использовать поиск, заменить, захватить, не обращая внимания на помощь, то это намного сложнее, чем должно быть. – SgtPooki

+0

Одна вещь, которая меня беспокоит о MSVS 2012/3, - это два разных диалога поиска/замены, в частности, меньший (Ctrl-H), где я случайно (с нажатием клавиш, возможно, что-то еще что-то в другом месте) изменяет область действия поиск. Но пункт **, который я хочу сделать **, состоит в том, что при более широком (Ctrl-Shift-H) диалоге есть кнопки после полей «Найти и заменить», которые дают вам список наиболее важных возможностей, включая то, что вы ищете - так вам не нужна помощь! Я предполагаю, что многие люди не видят кнопки или землю в диалоге Ctrl-H и не видят их. – PJTraill

ответ

218

Чтобы найти и заменить в VS 2012 и VS 2015 вы выполните следующие действия:

Пример (благодаря syonip)

В найти варианты, убедитесь, что «регулярные выражения» проверяется, и поместите следующие как текст для поиска:

_platformActions.InstallApp\((.+)\)

И следующее, как текст, чтобы заменить его:

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

Примечание: Как отмечает SLaks в комментарии ниже, изменение синтаксиса регулярных выражений связано с переходом VS2012 на стандартный механизм регулярных выражений .Net.

Примечание: Другой комментатор отметил, что это работает в Visual Studio Code (vscode), а

+9

Чтобы быть более общим, VS2012 теперь использует стандартный механизм регулярных выражений .Net. – SLaks

+2

Вам не нужно избегать символа периода между '_platformActions' и' InstallApp'? –

+0

Думая об этом сейчас, это имело бы смысл. Я его не тестировал. Не стесняйтесь бросить там редактирование. – SgtPooki

11

Чтобы добавить пример этого, здесь есть то, что я должен был сделать в моем коде:

Найти то, что:

_platformActions.InstallApp\((.+)\) 

Заменить:

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

Это заменяет любой вызов InstallApp (x) с помощью this.Platform(). App (x) .Install().

* Не забудьте отметить «Использовать регулярные выражения» в опции Find

2

Если вы хотите работать, используя имена групп (с помощью того же образца, что и выше):

Найти что:

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

Заменить:

this.Platform().App(${mygroupename}).Install() 
2

Чтобы улучшить вышеуказанные ответы: Вы должны заменить

_platformActions.InstallApp\((.+)\)

с

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

видом $ {1}, если вы хотите, чтобы добавить номер за захватом. $18 попытается вставить 18-й поиск, а не первый с добавленным 8.