Gibt es eine Möglichkeit, Visual Studio dazu zu bringen, eine Regex-Ersetzung über mehrere Zeilen hinweg durchzuführen (lassen Sie die Übereinstimmung die Zeilengrenzen überschreiten)? Ich weiß, dass ich dafür viele Editoren verwenden kann, aber es scheint seltsam, dass diese Funktion in Visual Studio nicht berücksichtigt wurde. Vermisse ich etwas
quelle
end
), damit es nicht gierig ist. dh:start(.*\n)*.*?end
start
undend
. Wenn Sie den nächsten finden möchten,end
verwenden Sie die nicht gierige Version :(?s)start.*?end
, oderstart(.*\n)*?.*?end
.(?s)
?Reguläre Ausdrücke haben sich in Visual Studio 2013 geändert . https://msdn.microsoft.com/en-us/library/2k3te2cs(v=vs.120).aspx
Um einen Ausdruck über zwei Zeilen abzugleichen, lautet der Code jetzt:
StartOfExpression.*\r?\n.*EndOfExpression
quelle
</label>.*\r?\n.*<div
wo\r?\n
ist die offensichtliche carriage_return-new_line und.*
für die Übereinstimmung der möglichen Tabulatoren / LeerzeichenDies funktioniert heute in Visual Studio 2012:
Sehen Sie, wie der
(.*\n)+?
Teil die Übereinstimmung über mehrere Zeilen hinweg macht, ohne gierig zu sein.fooPatternToStart
befindet sich ein Regex-Muster in Ihrer Startzeile, währendbarPatternToEnd
sich Ihr Muster in einer anderen Zeile darunter befindet, möglicherweise in vielen Zeilen darunter ...Beispiel hier gefunden .
Einfach und effektiv :)
Hinweis: Vor VS2012 funktionierte das folgende Muster:
fooPatternToStart.(.\n)+@.*barPatternToEnd
quelle
sprintf.*(.*\n)+?.*log.*(.*\n)+?.*__func__
arbeitet umlog
zwischensprintf
und zu suchen__func__
, danke! Tho .. es scheint in die Unendlichkeit dafür zu schauen .. wenn es nur eine Möglichkeit gäbe, die Anzahl der Zeilen zu begrenzenHinweis: In dieser Antwort wird die in Visual Studio bis einschließlich VS 2012 verwendete Regex-Syntax verwendet. In VS 2013 und höher wurde die Regex-Syntax geändert.
Sie können
\n
in den Ausdruck aufnehmen. Als Beispiel ist hier ein regulärer Ausdruck, den ich verwende, um automatisch generierte SQL-Skripte von allem zu "bereinigen", was keine gespeicherte Prozedur ist (er stimmt mit Textblöcken überein, die mit einer Zeile beginnen, die "Object:" enthält, gefolgt von etwas, das nicht ist "StoredProcedure", das dann die folgenden Zeilen mit einer Zeile verknüpft, besteht aus dem Wort "GO"):quelle
Möglicherweise müssen Sie am Ende Ihres Ausdrucks \ r \ n verwenden.
quelle
Nicht gierige mehrzeilige Zeichenerfassung, Visual Studio 2013+:
Gierige Version in Giles Roberts 'Antwort.
quelle
Für alle, die hierher kommen, während sie nach VS-Code suchen, verwende ich dies, um alles von
script
überall mit 2 Zeilenumbrüchen abzugleichen (Zeilenumbrüche ausgeschlossen):ersetzen
script
und\n\n
alles zwischen ihnen zusammenbringen.quelle