Як ви посилаєтесь на групу захоплення із знаходженням та заміною регулярних виразів у 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.