Ich verwende Notepad++ und versuche, eine Möglichkeit zu finden, mit der ich in derselben Zeile nach mehreren Werten suchen kann. Die Regex-Suche funktioniert bei mir derzeit nicht, da ich möglicherweise nicht weiß, in welcher Reihenfolge die Werte stehen.
Ich möchte beispielsweise nach einer Codezeile suchen, die drei bestimmte Werte hat. Die Verwendung .*
der Regex-Suche funktioniert nicht, da Sie die Reihenfolge der Werte kennen müssen. Ist es mir möglich, nach diesen Zeilen zu suchen, ohne die Reihenfolge der Werte zu kennen?
In jeder Zeile habe ich vielleicht ein Handelsprotokoll mit 30 verschiedenen Tags. Ich möchte danach suchen 35=D, EUR/USD, 150=8
. Ich möchte nur nach Einträgen suchen, bei denen alle drei Werte vorhanden sind.
Das Problem, auf das ich gestoßen bin, besteht darin, dass die Reihenfolge dieser Tags nicht garantiert ist, sodass die Regex-Suche, die ich unten verwende, nicht immer alle Einträge findet, die ich benötige.
35=D.*EUR/USD.*150=8
Antwort1
Verwenden vonSchau vorausist viel effizienter und kann mit einer beliebigen Anzahl von Wechselvorgängen umgehen, ohne die Komplexität zu erhöhen:
- Ctrl+F
- "Finde was":
^(?=.*\b35=D\b)(?=.*\bEUR/USD\b)(?=.*\b150=8\b).+$
- Überprüfen"Groß-/Kleinschreibung beachten"
- Überprüfen"Umwickeln"
- Überprüfen"Regulären Ausdruck"
- Deaktivieren "
.
entspricht Zeilenumbruch" - Find All in Current Document
Erläuterung:
^ # Beginning of line
(?= # Start positive lookaead, make sure we have after:
.* # 0 or more any character but newline
\b # Word boundary to be sure not matching 135=DATA
35=D # Literally
\b # word boundary
) # End lookahead
(?= # Start positive lookaead, make sure we have after:
.* # 0 or more any character but newline
\b # Word boundary
EUR/USD # Literally
\b # Word boundary
) # End lookahead
(?= # Start positive lookaead, make sure we have after:
.* # 0 or more any character but newline
\b # Word boundary
150=8 # Literally
\b # Word boundary
) # End lookahead
.+ # One or more any character but newline
$ # End of line
Bildschirmaufnahme:
Antwort2
Um nur die Zeilen abzugleichen, in denen alle drei Zeichenfolgen vorhanden sind, können Sie den alternativen |
Operator verwenden und (...)
Ihre Muster gruppieren, um einen regulären Ausdruck für alle möglichen Permutationen zu erstellen:
(35=D.*EUR/USD.*150=8)|(35=D.*150=8.*EUR/USD)|(EUR/USD.*150=8.*35=D)|(EUR/USD.*35=D.*150=8)|(150=8.*35=D.*EUR/USD)|(150=8.*EUR/USD.*35=D)
Eine lesbare Version mit hinzugefügten Zeilenumbrüchen:
(35=D.*EUR/USD.*150=8)|
(35=D.*150=8.*EUR/USD)|
(EUR/USD.*150=8.*35=D)|
(EUR/USD.*35=D.*150=8)|
(150=8.*35=D.*EUR/USD)|
(150=8.*EUR/USD.*35=D)
Dies würde auf alle Zeilen passen, in denen eine Kombination aus 35=D
, EUR/USD
und 150=8
(und eventuell Text dazwischen) vorkommt. In diesem Beispieltext würden nur die letzten drei Zeilen eine Übereinstimmung aufweisen (Schaltfläche „Alle im aktuellen Dokument suchen“):
some text 35=D
some text EUR/USD more text 150=8
some text 35=D more text EUR/USD more text 150=8
some text EUR/USD more text 35=D more text 150=8 more text
some text 150=8 more text EUR/USD 35=D more text