Wie verweisen Sie auf eine Erfassungsgruppe mit regulärem Suchen und Ersetzen in Visual Studio 2012, 2013, 2015 und VS Code?

255

Mir ist klar, dass es eine Menge Fragen dazu gibt, aber keine, auf die ich speziell Bezug genommen habe, auf welche VS-Version sie sich bezogen haben. Da diese wichtigen Informationen fehlten, konnte ich die gefundenen Antworten immer noch nicht erfolgreich verwenden. Am häufigsten war

  • Mit {} umgeben, Capture mit \ 1, \ 2, \ n anzeigen

Dies scheint jedoch die alte Methode zum Suchen und Ersetzen von Regex in Visual Studio zu sein und funktioniert in VS 2012 nicht.

SgtPooki
quelle
1
Dies ist in der Hilfe nicht allzu schwer zu finden: Im Dialogfeld Suchen / Ersetzen F1; Anfang Suchen und Ersetzen von Text gibt es einen Link zu Reguläre Ausdrücke in VS ; dort verweist der 2. Tipp auf Substitutionen in regulären Ausdrücken ; Dort gibt es Ihnen die Grundlagen und sagt, dass es mehr Details unter Ersetzen einer nummerierten Gruppe und gibt Ersetzen einer benannten Gruppe .
PJTraill
2
@PJTraill Es ist schön zu wissen, dass sie es einfacher gemacht haben, eine Frage für ihre 2012-Version irgendwann zwischen 2013 und 2015 zu beantworten. Bei den Abstimmungen denke ich jedoch, dass es ziemlich offensichtlich ist, dass es immer noch nicht "nicht zu schwer" ist, in der Hilfe zu finden. IMO: Wenn es einfacher ist, einen Stapelüberlaufartikel zu suchen und abzustimmen, als das Suchen, Ersetzen und Erfassen zu verwenden, ohne überhaupt nach Hilfe zu suchen, dann ist es viel schwieriger als es sein sollte.
SgtPooki
Eine Sache, die mich an MSVS 2012/3 stört, sind die zwei verschiedenen Such- / Ersetzungsdialoge, insbesondere der kleinere (Strg-H), in dem ich versehentlich (wobei Tastenanschläge wahrscheinlich irgendwo anders etwas anderes bedeuten) den Umfang der Suche ändere . Aber der Punkt, den ich ansprechen möchte, ist, dass der größere Dialog (Strg-Umschalt-H) Schaltflächen nach den Feldern Suchen und Ersetzen enthält, die Ihnen eine Liste der wichtigeren Möglichkeiten geben, einschließlich dessen, wonach Sie suchen - also nicht brauchen Sie Hilfe! Ich denke, dass viele Leute entweder die Tasten nicht erkennen oder im Strg-H-Dialog landen und sie nicht sehen können.
PJTraill
Ich bin damit einverstanden, dass die Hilfe etwas mühsam zu finden ist; Ich vermute, sie geben der Suche nach einfachem Text Vorrang. Mein Punkt ist mehr, dass man es ziemlich leicht finden kann , wenn man weiß oder annimmt, dass es dort sein muss ; allzu oft folge ich diesem Weg, da ich die kanonische Dokumentation lieber benutze, sobald ich sie gefunden habe. Ich wollte nicht abfällig klingen; Ich denke, es ist sowohl "zu schwer" als auch "nicht zu schwer" - sie sind keine Gegensätze, wenn Sie "nicht zu" als "hart" qualifizieren und die Antwort zu dem impliziten "hart für was?" Hinzufügen.
PJTraill
Ich "wusste", dass das REGEXP-Tagging '()' verwendet, las die Dokumentation erneut und es funktionierte nicht ... also kam ich hierher, um sicherzugehen ... dann habe ich noch mehr experimentiert und es hat funktioniert. Meiner Meinung nach muss in der MSDN-Dokumentation klar sein, dass () verwendet wird, um einen Ausdruck zu "markieren", für diejenigen von uns, die die alte VS6-Nomenklatur "tag" lernen mussten. Es wäre schön, wenn sie dieselbe Nomenklatur verwenden könnten. Nummerierte Gruppen ... starten die Synapsen meiner Meinung nach einfach nicht gut genug.
Ross Youngblood

Antworten:

356

Um VS 2012 und VS 2015 zu finden und zu ersetzen, gehen Sie wie folgt vor:

Beispiel (danke an syonip)

Stellen Sie in den Suchoptionen sicher, dass "Reguläre Ausdrücke verwenden" aktiviert ist, und geben Sie Folgendes als zu suchenden Text ein:

_platformActions.InstallApp\((.+)\)

Und das Folgende als Text, um es zu ersetzen:

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

Hinweis: Wie SLaks in einem Kommentar unten ausführt, ist die Änderung der Regex-Syntax darauf zurückzuführen, dass VS2012 auf die standardmäßige .Net-Regex-Engine umgestellt hat.

Hinweis: Ein anderer Kommentator wies darauf hin, dass dies auch in Visual Studio Code (vscode) funktioniert

SgtPooki
quelle
10
Um allgemeiner zu sein, verwendet VS2012 jetzt die standardmäßige .Net-Regex-Engine.
SLaks
4
Müssen Sie nicht dem Zeitraum zwischen _platformActionsund entkommen InstallApp?
rory.ap
Wenn ich jetzt darüber nachdenke, würde es Sinn machen. Ich habe es nicht getestet. Fühlen Sie sich frei, eine Bearbeitung dort zu werfen.
SgtPooki
1
Am Ende habe ich namens verwendet, da die Zahl zumindest für mich nicht zu funktionieren scheint. (?<rval>.+)auf der Suche und im Ersatz${rval}
Mark Schultheiss
2
Einige zusätzliche Hilfe: Wenn Sie das Ding (. *) Durch das Ding $ 18 ersetzen möchten (indem Sie direkt nach der Aufnahme eine '8' hinzufügen), müssen Sie das Ding $ {1} 8 verwenden
Luc Bloom
17

Um ein Beispiel dafür hinzuzufügen, musste ich Folgendes in meinem Code tun:

Finde was:

_platformActions.InstallApp\((.+)\)

Ersetzen mit:

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

Dies ersetzt jeden Aufruf von InstallApp (x) durch this.Platform (). App (x) .Install ().

* Vergessen Sie nicht, in den Suchoptionen "Reguläre Ausdrücke verwenden" zu markieren

syonip
quelle
10

Wenn Sie mit Gruppennamen arbeiten möchten (mit demselben Beispiel wie oben):

Finde was:

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

Ersetzen mit:

this.Platform().App(${mygroupname}).Install()
Yepeekai
quelle
9

So verbessern Sie die obigen Antworten: Sie sollten ersetzen

_platformActions.InstallApp\((.+)\)

mit

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

Beachten Sie die $ {1}, wenn Sie jemals eine Zahl hinter dem Capture hinzufügen möchten. $18wird versuchen, die 18. Sucherfassung einzufügen, nicht die erste mit einem 8angehängten.

Luc Bloom
quelle