Як ви посилаєтесь на групу захоплення із знаходженням та заміною регулярних виразів у Visual Studio 2012, 2013, 2015 та VS Code


254

Я усвідомлюю, що з цього приводу є безліч питань, але жоден, на який я не знайшов конкретного посилання, на яку версію VS вони посилалися. Не маючи такої важливої ​​інформації, я все ще не зміг успішно використати знайдені відповіді. Найпоширенішим був

  • Навколо {}, відображення зйомки з \ 1, \ 2, \ n

Однак це, здається, є старим методом пошуку і заміни регулярного виразу в Visual Studio, і він не працює в VS 2012.


1
Це не надто важко знайти у довідці: у діалозі Пошук / Заміна F1; на початку пошуку та заміни тексту є посилання на Використання регулярних виразів у VS ; там друга порада посилається на « Заміни в регулярних виразах» ; там він дає вам основи та каже, що в розділі Заміна нумерованої групи та Заміна іменованої групи є детальніше .
— PJTraill

2
@PJTraill приємно знати, що вони спростили відповісти на питання для своєї версії 2012 року між 2013 та 2015 роками. Хоча голосами, я думаю, це досить очевидно, що все ще не дуже важко знайти допомогу. ІМО: Якщо в статті про переповнення стека простіше шукати та проголосувати, ніж використовувати знахідку, заміну, захоплення, не шукаючи допомоги, то це набагато складніше, ніж має бути.
— SgtPooki

Одне, що мене клопоче про MSVS 2012/3, - це два різних діалогу пошуку / заміни, зокрема менший (Ctrl-H) діалог, де я тримаюсь випадково (натискання клавіш, мабуть, означає щось інше), змінюючи сферу пошуку . Але я хочу зазначити, що в діалозі з більшим діапазоном (Ctrl-Shift-H) є кнопки після полів "Знайти та замінити", які дають вам список найважливіших можливостей, включаючи те, що ви шукаєте. потрібна допомога! Я думаю, що багато людей або не помічають кнопки, або перебувають у діалозі Ctrl-H і не бачать їх.
— PJTraill

Я погоджуюся, що допомога трохи не турбує пошук; Я підозрюю, що вони надають пріоритет пошуку простого тексту. Моя думка більше, що якщо хтось знає або припускає, що він повинен бути там, його можна знайти досить легко; все часто я слідую за цим маршрутом, тому що я вважаю за краще використовувати канонічну документацію, коли можу її знайти. Я не хотів звучати зневажливо; Я вважаю, що це і "занадто важко", і "не надто жорстко" - вони не є протилежністю, якщо ви бачите "не надто" як кваліфікуючу "важку" і додаєте у відповідь неявне "важко для чого?".
— PJTraill

Я "знав", що тег REGEXP використовує '()', перечитав документацію, і вона не спрацювала ... тому я прийшов сюди, щоб переконатися ... тоді я ще трохи експериментував, і це спрацювало. Отже, IMHO документація MSDN повинна бути надто зрозумілою, що () використовуються для "тегування" виразу, для тих із нас, хто повинен був вивчити стару номенклатуру "тегів" VS6. Було б добре, якби вони могли використовувати ту саму номенклатуру. Пронумеровані групи ... просто не запускають синапси досить добре ІМХО.
— Росс Янгблуд

Відповіді:


355

Щоб знайти та замінити в VS 2012 та VS 2015, виконайте такі дії:

Приклад (завдяки syonip)

У параметрах пошуку переконайтесь, що прапорець "Використовувати регулярні вирази" встановлено та введіть наступний текст як текст:

_platformActions.InstallApp\((.+)\)

І наступне як текст для його заміни:

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

Примітка. Як зазначає SLaks у коментарі нижче, зміна синтаксису регулярних виразів відбувається через перехід VS2012 на стандартний двигун .gege regex.

Примітка. Ще один коментатор зазначив, що це працює і в Visual Studio Code (vscode)


10
Якщо бути більш загальним, VS2012 зараз використовує стандартний двигун .gege.
— СЛАкс

4
Вам не потрібно , щоб уникнути періоду напівкоксу між _platformActionsі InstallApp?
— rory.ap

Думати про це зараз, це мало б сенс. Я цього не перевіряв. Сміливо киньте правки туди.
— SgtPooki

1
Закінчується, я використав ім'я, оскільки числовий, здається, не працює для мене щонайменше. (?<rval>.+)у пошуках та заміні${rval}
— Марк Шультейс

2
Деяка додаткова допомога: якщо ви хочете замінити річ (. *) На річ 18 дол. США (додавши "8" безпосередньо після захоплення), вам доведеться використовувати річ $ {1} 8
— Люк Блум

17

Щоб додати приклад цього, ось що мені довелося зробити в своєму коді:

Знайти що:

_platformActions.InstallApp\((.+)\)

Замінити:

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

Це замінює будь-який виклик InstallApp (x), цим.Platform (). Додаток (x) .Install ().

* Не забудьте позначити "Використовувати регулярні вирази" у параметрах Знайти


10

Якщо ви хочете працювати з іменами груп (використовуючи той самий зразок, що і вище):

Знайти що:

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

Замінити:

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

9

Щоб покращити наведені вище відповіді: Вам слід замінити

_platformActions.InstallApp\((.+)\)

з

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

Зверніть увагу на $ {1}, якщо ви хочете додати число за захопленням. $18спробує вставити 18-ту схопку пошуку, не першу із 8доданим.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.