Wie kann ich alle Zeilen eines Dokuments mit "StrA", aber nicht "StrB" in Visual Studio-Suchfeld abrufen?Regex: Wie alle Linien, die StrA aber nicht StrB in Visual Studio enthalten
Antwort
Sie würden Negative lookarounds verwenden, aber der Ausdruck ist sehr komplex, wenn Sie die erwartete Position (oder gar Reihenfolge) der Begriffe nicht kennen. Do kennen Sie die Reihenfolge oder Muster?
Sonst würde ich Ihnen raten, ein anderes Werkzeug zu benutzen, die genauso einfach Schleife (oder eine Liste comp) über eine Datei Zeile für Zeile und tun inStr oder enthält oder andere einfache, schneller, logische Tests ...
für Visual Studio 2012 (und neuere Versionen):
^(?!.*strB).*strA.*$
Erläuterung:
^ # Anchor the search at the start of the line
(?!.*strB) # Make sure that strB isn't on the current line
.*strA.* # Match the entire line if it contains strA
$ # Anchor the search to the end of the line
Sie können am Ende der Regex (?:\r\n)?
hinzufügen, wenn Sie die Wagenrücklauf-/Zeilenvorschübe auch zusammen mit dem Rest der Zeile entfernen möchten.
Das hat funktioniert. Ich musste erweitern, um mehrere Strings für den Ausschluss zu unterstützen, was z. '^ (?!. * strB) (?!. * strC) (?!. * strD). * strA. * $'. – DuckMaestro
Ich gehe davon aus, dass das Suchfeld tatsächlich allgemeine reguläre Ausdrücke akzeptiert. Mit negativem Look-Ahead:
(?!^.*strB.*$)strA
Sie müssen die mehrzeilige Optionen einzustellen (^
und $
Spiel am Anfang/Ende der Linien). Wenn Sie es nicht mit den Dialogoptionen können, versuchen Sie:
(?m)(?!^.*strB.*$)strA
Dies ist wahrscheinlich der Standardmodus in diesem Motor though.
Sie müssen den gesamten Regex verankern, nicht nur den Lookahead. Das bedeutet, dass Sie das '^' * außerhalb des Lookahead platzieren und ein weiteres '. *' Vor 'strA' hinzufügen. Aber es ist nicht notwendig, irgendeinen Teil der Regex an das * Ende * der Zeile zu verankern (d. H. Das '. * $' Kann gehen). –
Nun, ich weiß es nicht. Wie ich es jetzt sehe, schrieb ich es als "wenn eine Zeile nicht strB enthält, match strA". Scheint mir immer noch richtig, da wir Zeile für Zeile zusammenpassen. Ich denke. Das Lesen von alten Regexen macht mein Gehirn weh. – wds
für Visual Studio 2010 (und frühere Versionen):
Das Visual Studio Suchfeld seine eigene, bizarre Version von regex Syntax hat. Dieser Ausdruck funktioniert wie gewünscht:
^~(.*strB).*strA
^
entspricht den Anfang einer Zeile. (In der Regel für einen Texteditor, gibt es keine „mehrzeilige“ Option;. ^
und $
immer an der Linie Grenzen entsprechen)
.
jedes Zeichen außer Newline. (Nicht so typisch, es scheint keinen "Single-Line" oder "Dot-All" Modus zu geben, der Punkte mit Newline übereinstimmen lässt.)
~(...)
ist das "prevent match" -Konstrukt, gleichwertig (soweit ich das beurteilen kann) zum negativen Lookahead ((?!...)
), das von den anderen Respondern verwendet wird.
FYI, ab Visual Studio 2012 wird jetzt die dotNet Regex-Engine für Suchvorgänge verwendet, daher sollte die bizarre Syntax nun weg sein. Schöne Antwort, aber sei dir bewusst, welche Version von VS du verwendest. – redcalx
Beim Testen in Visual Studio 2010 SP1Rel muss diese Antwort geändert werden, wenn "strB" AFTER "strA" sein könnte. Versuchen Sie '^ ~ (. * StrB). * StrA ~ (. * StrB)'. Oder '~ (strB). * StrA. * ~ (StrB)'. – ToolmakerSteve
Dieser arbeitete für mich mit Visual Studio 2010.
^+ [^ (strB)] + (strA) + [^ (strB)] + $
- 1. Regex in Visual Studio: Wie kommentiert man alle Zeilen, die "xyz" enthalten?
- 2. Visual Studio Regex '?'
- 3. Wie alle Linien mit gemeinsamen Muster in Splunk Regex übereinstimmen
- 4. regex, die mehrere Linien
- 5. Visual Studio hängt für regex Suche ^. * $
- 6. aus blauen Linien in Visual Studio
- 7. Regex RE: Alle, aber nicht dieses Muster
- 8. Visual Studio 2013 ausblenden Codeblock Linien, Indikatoren
- 9. Visual Studio 2008 suchen und ersetzen Regex
- 10. Get Dll enthalten in Visual Studio
- 11. Regex für alle Zeichenfolgen, die keine Zeichenfolge enthalten?
- 12. REGEX: match Verzeichnis Linien
- 13. Stripping Linien, die enthalten keine Textphrase
- 14. Visual Studio 2010 veröffentlicht nicht alle App_Data
- 15. Visual Studio, Suchen und Ersetzen, Regex
- 16. Ist die Codeabdeckung in Visual Studio Team Services-Paketen (Visual Studio Online) enthalten?
- 17. Visual Studio kann keine Headerdatei enthalten.
- 18. Visual Studio kompiliert, aber die EXE ist nicht da
- 19. Regex Linien erhalten, die kein Wort
- 20. Visual Studio berücksichtigt keine Verzeichnisse enthalten
- 21. WCF-Test-Client funktioniert nicht mehr in Visual Studio 2013, aber funktioniert in Visual Studio 2015
- 22. Wie findet man alle initialisierten Klassen in Visual Studio 2015 mit Regex?
- 23. Schließen Sie alle Werkzeugfenster in Visual Studio?
- 24. "Tabify" alle Dateien in Visual Studio-Lösung?
- 25. wie alle Linien von einem anzuzeigen, die Regex in Linux passen
- 26. Collapse ALLE #Region in Visual Studio 2012
- 27. Wie die Visual Studio-Formulardesigner
- 28. R-Faktor alle Spalten, die Zeichenfolge enthalten
- 29. Alle Linien zwischen Punkten
- 30. Visual Studio 2010, das nicht alle Dateien im Dateisystem veröffentlicht
Sie dies tun zu... eine Befehlszeile oder in irgendeinem Code? Welches Betriebssystem oder welche Sprache? –
Im Visual Studio Suchfeld. – Ricky