Regex Order unwichtig bei Lookaheads?

berndoa

Top Contributor
Hallo,
ich verzweifle gerade am Bauen von Regex Ausdrücken.
Ich habe 2-3 bedingungen, die ich erfüllt haben will.
Also bspw. habe ich sowas wie

Python:
    r"(?i)(?=.*"
    r"(?: be | breakeven | break even )"
    r".*)(?=.*"
    r"(?: move )+"
    r".*)(?=.*"
    r" (?P<sl>stoploss|sl) "
    r".*)(?=.*"
    r" (?P<pair>[a-zA-Z]+[\/\.\\]*[a-zA-Z]+)? "
    r".*)"

Also 3 regex ausdrücke die, hoffentlich die 3 Bedingungen
enhält be, breakeven oder break even
enthält mindestens einmal move
enthält ein pair (die syntax dort stimmt garantiert, buchstaben, dann optional ein sonderzeichen, dann wieder buchstaben. und das optional weil nicht zwingend ein pair vorkommen muss)


nur scheitere ich am banalsten:
Wie kriege ich es hin dass jeder string gematcht wird der die 3 bedingungen in irgendeiner reihenfolge erfüllt?
Ohne jetzt ernsthaft jede mögliche reihenfolge von bedingungen explizit aufzuschreiben und zu verodern?

Ich kapiere auch nicht wirklich wie das mit diesen lookaheads, lookbehind etc. funktioneirt und wie ich die da für meine zwecke nutzen kann.
Named und unnamed capture groups checke ich noch und kriege ich recht zuverlässig hin, aber darüber hinaus verzweifle ich.

kann mir da jemand so das generelle muster sagen, wie man das hinkriegt, mehrere unter-regex miteinander zu kombinieren dass die in jeder reihenfolge erkannt werden?
 

LimDul

Top Contributor
Das wird mir zu kompliziert - ich würde es anders lösen:
3 eigene Regex-Ausdrücke für deine Bedingungen und dann im if Statement einfach alle drei abfragen. Man muss das nicht zwangsweise in in einen komprimieren.
 

berndoa

Top Contributor
hm, aber es soll ja dem muster folgen...
habe da so einen string wie: (newline charcters sind an den entsprechenden Zeilenumbrüchen)
Code:
Sell BTC.USD 41300

TP 1 41200

TP 2 41100

SL 41600

wenn wir jetzt nur mal die 1. zeile angucken.

die 3 ausdrücke direction (eben ob sell oder buy) das pair (Btc.Usd, usdaux, etc.) und die zahl dahinter könnte ja in 3!=6 verschiedenen kombinationen auftreten.

dann müsste ich 6 regexabfragen für jeden ausduck machen und mit if der reihe nach abfragen.

wenn noch die restlichen zeilen auch einige mögliche varianten aufweisen wie deren bestandteile hintereinaner stehen könnten, dann gute Nacht.


Chatgpt behauptet zumindest, mit dem eingänglichen Ausdruck würde ich sowohl sowas wie Sell BTC.USD 41300
als auch BTC.USD Sell 41300 abfangen. aberobs stimmt, keine ahnung. weil ich nciht ganz durchblicke wie diese lookaheads und lookbehinds überhaupt funktionieren.
 

mrBrown

Super-Moderator
Mitarbeiter
Chatgpt behauptet zumindest
Alles was dahinter kommt kann man üblicherweise ignorieren, grad wenn es darum geht, ob irgendwas richtig ist, sind LLMs absolut ungeeignet.


Um mal zum Thema zu kommen: das ganz geht ein bisschen in Richtung XY-Problem, daher einfach mal die Frage: welches Problem möchtest du mit regulären Ausdrücken lösen?

Nur aus Texten der Form "<direction> <pair> <zahl>" (wobei die drei in beliebiger Reihenfolge stehen können), die drei jeweiligen Werte bekommen?
 

LimDul

Top Contributor
Mal als Gedanke - Schreib mal auf, was du eigentlich fachlich erkennen willst. Und gieße das in einen Algorithmus. Dann ist es vielleicht nicht 1 oder 3 RegEx-Ausdrücke sondern vielleicht 5+ mit insgesamt 10-50 Zeilen Code. Dafür ist es aber näher an der fachlichen Beschreibung damit auch deutlich verständlicher
 

berndoa

Top Contributor
Alles was dahinter kommt kann man üblicherweise ignorieren, grad wenn es darum geht, ob irgendwas richtig ist, sind LLMs absolut ungeeignet.


Um mal zum Thema zu kommen: das ganz geht ein bisschen in Richtung XY-Problem, daher einfach mal die Frage: welches Problem möchtest du mit regulären Ausdrücken lösen?

Nur aus Texten der Form "<direction> <pair> <zahl>" (wobei die drei in beliebiger Reihenfolge stehen können), die drei jeweiligen Werte bekommen?

konkret:
Aus
Code:
Sell BTC.USD 41300

TP 1 41200

TP 2 41100

SL 41600

in Form von named captured groups
das "Sell" rausziehen (kann auch stattdessen "buy" dastehen)
das "Btc.Usd" rausziehen (kann auch statt .ein / dastehen oder auch gar nichts zwischen den 2 währungen)
die zahl am ende der 1. zeile (nennen wir sie "entry").

in den folgezeilen die zahlen rausziehen und sie mit dem ausdruck davor benennen (also ne "tp 1" "tp2" "sl" variable, die die jeweilige zahl beinhaltet.
wobei ein tp2 mit zahl nicht zwingend vorkommen muss.

und in zeile 1 können die 3 infos eben in beliebier reihenfolge vorkommen.

kann also auch als
Code:
 BTC.USD 41300 Sell

TP 1 41200

TP 2 41100

SL 41600

auftauchen

sind halt nachrichten was für einen forextrade man amchen soll, mit take profit 1 und 2, stop loss, richtung, paar und eisntiegspunkt (die zahl in zeile 1).

will halt alle relevanten infos rausziehen und idealerweise automatisch passend benannten variabeln zuordnen mit denen ich weiterarbeiten kann.

denke, da sollte an und für sich regex am bestern dafür geeignet sein.
 

LimDul

Top Contributor
Ich würde es wie folgt lösen:
  • Zeile 1 an Trennzeichen (Space/Tabulator) splitten
  • jedes gesplitte Element bewerten, was es ist (Buy/Sell per String vergleich, Die Wert per StringUtils.isNumeric, das dritte per RegEx)
  • Die weiteren Zeilen jeweils per RegEx auswerten.
 

Meniskusschaden

Top Contributor
konkret:
Aus
Code:
Code:
Sell BTC.USD 41300

TP 1 41200

TP 2 41100

SL 41600

in Form von named captured groups
das "Sell" rausziehen (kann auch stattdessen "buy" dastehen)
das "Btc.Usd" rausziehen (kann auch statt .ein / dastehen oder auch gar nichts zwischen den 2 währungen)
die zahl am ende der 1. zeile (nennen wir sie "entry").

in den folgezeilen die zahlen rausziehen und sie mit dem ausdruck davor benennen (also ne "tp 1" "tp2" "sl" variable, die die jeweilige zahl beinhaltet.
wobei ein tp2 mit zahl nicht zwingend vorkommen muss.

und in zeile 1 können die 3 infos eben in beliebier reihenfolge vorkommen.

Man kann das vielleicht mit diesem Ausdruck machen (hier als Beispiel auf regex101):
Code:
(?<header>(((?<direction>Sell|Buy)|(?<pair>[A-Z]{3}\.[A-Z]{3})|(?<entry>\d{5}))\s+){3})\n*TP 1 (?<TP1>\d{5})\n*(TP 2 (?<TP2>\d{5}))?\n*SL (?<SL>\d{5})
Der ist aber nicht perfekt. Z.B. erlaubt er im header zwar eine beliebige Reihenfolge von direction, pair und entry, stellt aber nicht sicher, dass es jeweils genau ein Element davon gibt. Es wären beispielsweise auch zwei direction, ein pair und kein entry erlaubt. Vielleicht lässt sich das mit Lookaround-Assertions noch verbessern, aber ich bezweifle, dass sich das lohnt, denn der Regex würde deutlich häßlicher werden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Regex greift nicht richtig Java Basics - Anfänger-Themen 4
F RegEx Hilfe Java Basics - Anfänger-Themen 5
R RegEx funktioniert nicht Java Basics - Anfänger-Themen 14
B Regex Ausdrücke für Monate Java Basics - Anfänger-Themen 7
W RegEx Java Basics - Anfänger-Themen 4
K REGEX - Rechnungsbetrag wird nicht richtig ausgelesen. Java Basics - Anfänger-Themen 3
X Wie kann man ein Regex erstellen, die 8-Bit-Binär-Zahlen darstellen. Java Basics - Anfänger-Themen 1
A Zusammengesetzte Nomen/Straßennamen mit Regex-Ausdrücken trennen Java Basics - Anfänger-Themen 8
Fodoboo131 RegEx- Umwandlung von String in ausführbares Objekt/ Befehl Java Basics - Anfänger-Themen 9
H Java Regex Aufzählung kontrollieren Java Basics - Anfänger-Themen 3
Nooobi Regex und .matches() geben keine Ausnahme Java Basics - Anfänger-Themen 10
sserio Split() -> Regex Frage. Java Basics - Anfänger-Themen 7
K Wie verneine ich einen Regex? Java Basics - Anfänger-Themen 2
L Hilfe bei RegEx Java Basics - Anfänger-Themen 4
Dimax RegEx Java Basics - Anfänger-Themen 10
P Einfacher regulärer Ausdruck (RegEx) für E-Mail-Adressen Java Basics - Anfänger-Themen 2
O Regex bei ReplaceAll ersetzt Wort und Sonderzeichen nicht. Java Basics - Anfänger-Themen 9
O Text mit Regex trennen und wieder zusammenbauen Java Basics - Anfänger-Themen 5
L Regex issue Java Basics - Anfänger-Themen 4
B Regex Kombination benötigt Java Basics - Anfänger-Themen 5
strohkolben Regex Java Basics - Anfänger-Themen 3
OnDemand Regex oder Split? Java Basics - Anfänger-Themen 5
I String.split regex Frage Java Basics - Anfänger-Themen 2
C RegEx Problem Java Basics - Anfänger-Themen 4
Dimax RegEx funktionieren nicht Java Basics - Anfänger-Themen 7
M Regex nur Zahlen und Punkt zulassen, Keine Eingabe(Leeres TextFeld) nicht zulassen Java Basics - Anfänger-Themen 6
K substitute mit regex Java Basics - Anfänger-Themen 10
G RegEx Java Basics - Anfänger-Themen 11
M Regex Erstellung Problem Java Basics - Anfänger-Themen 2
M Regex Probleme (mal wieder) Java Basics - Anfänger-Themen 3
M Regex zum Integer.parseInt Java Basics - Anfänger-Themen 4
G Regex Java Basics - Anfänger-Themen 4
M Regex-Ausdruck: Alle Zeichen bis auf ein bestimmtes erlauben (p{L}) Java Basics - Anfänger-Themen 5
M Regex anpassen Java Basics - Anfänger-Themen 19
C Regex-Problem Java Basics - Anfänger-Themen 4
M Regex für bestimmte Wörter bzw. bestimmte Zeichen erstellen Java Basics - Anfänger-Themen 5
C Positive und negative Zahlen mit Regex extrahieren Java Basics - Anfänger-Themen 8
F RegEx für Email Java Basics - Anfänger-Themen 2
F RegEx "+" nur als Zeichen, nicht als Operator oder Sonstiges Java Basics - Anfänger-Themen 2
FelixN RegEx aus einem String als String-Array zurückgeben Java Basics - Anfänger-Themen 8
FelixN RegEx Erläuterung "ˆ[ˆa-zA-Z]+$" Java Basics - Anfänger-Themen 6
F Regex Hilfe Java Basics - Anfänger-Themen 3
I Regex findet keine Treffer Java Basics - Anfänger-Themen 4
C Regex Java Basics - Anfänger-Themen 2
C Probleme bei Regex Java Basics - Anfänger-Themen 9
B Regex ignorieren von Groß - Kleinschreibung Java Basics - Anfänger-Themen 1
F Regex für Inlineformatierungen Java Basics - Anfänger-Themen 12
W Einfachen, ein beliebiges Zeichen oft erkennenden Regex Parser selber schreiben - wie vorgehen? Java Basics - Anfänger-Themen 12
O Regex Java Basics - Anfänger-Themen 2
F Switch Case Problem mit Regex lösen? Java Basics - Anfänger-Themen 6
H regex-Problem Java Basics - Anfänger-Themen 2
F Ist das ein korrekter Regex-Ausdruck? Java Basics - Anfänger-Themen 12
M Zahlenbereich mit RegEx Java Basics - Anfänger-Themen 3
B Hilfe bei Regex - Erstellung Java Basics - Anfänger-Themen 5
D regex Aufbau Frage Java Basics - Anfänger-Themen 4
W RegEx Matcher + Pattern und Emails Java Basics - Anfänger-Themen 8
R Rechenzeichen als regex Java Basics - Anfänger-Themen 10
S Ich verstehe die RegEx Tabelle von Javadoc nicht so ganz Java Basics - Anfänger-Themen 3
C Erste Schritte Regex - Datei einlesen und splitten Java Basics - Anfänger-Themen 4
F RegEx Problem Java Basics - Anfänger-Themen 8
F Regex Hilfe Java Basics - Anfänger-Themen 14
G String nach Contains/Regex Java Basics - Anfänger-Themen 2
U RegEx alle Kommas bei den Zahlen in Punkt umwandeln Java Basics - Anfänger-Themen 3
K RegEx - Multiple Line Java Basics - Anfänger-Themen 3
S Regex Pattern Java Basics - Anfänger-Themen 3
K Regex: illegal character range Java Basics - Anfänger-Themen 4
F RegEX Hilfe Java Basics - Anfänger-Themen 8
U Regex für kommaseparierte Zahlen Java Basics - Anfänger-Themen 1
K Operatoren Regex für 10er Zahlen Java Basics - Anfänger-Themen 8
V Java Regex richtig parsen Java Basics - Anfänger-Themen 2
E Brauche eine Antwort zum Thema RegEx ( Alternative zur Lösung auch gesucht ) Java Basics - Anfänger-Themen 5
N mein RegEx Java Basics - Anfänger-Themen 2
C Lösung für RegEx in Java gesucht Java Basics - Anfänger-Themen 2
B Java - Reguläre Ausdrücke - RegEx oder Regular Expressions - Eckige Klammern Java Basics - Anfänger-Themen 2
M Regex/matcher Java Basics - Anfänger-Themen 2
T Methoden String.matches() - Regex Java Basics - Anfänger-Themen 2
truesoul Regex für www Java Basics - Anfänger-Themen 0
N Methoden Straßennamen und Hausnummer - RegEx Java Basics - Anfänger-Themen 19
W Erste Schritte Regex negieren Java Basics - Anfänger-Themen 3
W String match mit Wildcard ODER Regex Java Basics - Anfänger-Themen 1
E useDelimiter-Anwednung / Regex Java Basics - Anfänger-Themen 2
C java regex Java Basics - Anfänger-Themen 2
C Regex zum matchen ausserhalb von Tags Java Basics - Anfänger-Themen 3
O Regex zwischenspeichern Java Basics - Anfänger-Themen 6
O Regex Java Basics - Anfänger-Themen 5
R Einfacher Regex Java Basics - Anfänger-Themen 3
V RegEx Java Basics - Anfänger-Themen 15
HoloYoitsu Datentypen replaceAll() mit regex? Java Basics - Anfänger-Themen 5
G regex Verständnis Problem Java Basics - Anfänger-Themen 3
G verwendung von regex Java Basics - Anfänger-Themen 3
X Regex splitten Java Basics - Anfänger-Themen 5
T Regex Problem Java Basics - Anfänger-Themen 4
B String nach regex überprüfen Java Basics - Anfänger-Themen 6
J Regex Ausdrücke im Array - Wieso werden sie nicht erkannt? Java Basics - Anfänger-Themen 4
N Regex Java Basics - Anfänger-Themen 4
F String.replaceAll() funktioniert nicht richtig oder habe ich den falschen Regex?? Java Basics - Anfänger-Themen 3
J Regex mit Return Java Basics - Anfänger-Themen 3
I Rechenoperatoren mit Regex splitten Java Basics - Anfänger-Themen 12
F Methoden replaceAll (regex) HTML Java Basics - Anfänger-Themen 3
H Problem mit Regex in Verbindung mit BufferedReader Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben