Ich bin auf einem regulären Ausdruck fest:Regex und Bilanzkreise
ich eine Eingabezeichenfolge mit Zahlen und einem Buchstaben, die mehr Zahlen und Buchstaben innerhalb der Zeichenfolge und zwischen Klammern enthalten:
Nur einige Beispiele
26U(35O40) will be read as 26 and (35 or 40)
22X(34U(42O27)) will be read as 22 xor (34 and (42 or 27))
21O(24U27) will be read as 21 or (24 and 27)
20X10X15 Will be read as 20 xor 10 xor 15
ich gelesen habe, dass diese unter Verwendung von Bilanzkreisen erhalten werden können, jedoch habe ich versucht, viele reguläre Ausdrücke und schließt die folgenden:
Ich habe auch gedacht, dass ich es vielleicht härter mache und ich sollte einfach mehrmals die gleiche Regex laufen lassen, erstmalig für alles außerhalb der Klammer und das zweite Mal für die inneren Sachen und es nochmal ausführen wenn die übereinstimmt innere. Etwas wie das:
(?<ConditionId>\d+)?(?<Operator>U|O|X)?(?<Inner>(?:\().*(?:\)))
Vorschläge oder Hilfe?
Vielen Dank im Voraus.
Edit 1: Ich muss die Eingabe nicht validieren, nur parse es.
Edit 2: Der Grund dafür ist, eine Bedingung durch die Bedingung Id zu identifizieren und dann den Operator gegen die anderen Bedingungen in der Eingabe String anzuwenden. In der gleichen Reihenfolge, wie sie in der Eingabezeichenfolge angezeigt wird, wäre ein allgemeines Beispiel zum besseren Verständnis logische Gatter:
Für eine gegebene Eingabe von 20x10x15 muss ich die Bedingungen durch die BedingungId identifizieren und prüfen, ob Bedingung ist gültig und gilt den XOR-Operator auf sie, so etwas wie:
true X true X false = false;
false X false X true = true;
true X (false U true) = true
das ist der Grund, warum ich kann nicht alle Gruppe in eine „ConditionId“ -Gruppe und „Operator“ Gruppe.
bearbeiten 3 Dies ist auch ein gültiges Beispiel
(23X10)U(30O(20X19)
Warum haben Sie sich auf Regex für die Lösung dieses speziellen Problems entschieden? Sie sollten in der Lage sein, einen Parser mit regulären String-Operationen und einem Stack zu schreiben. – willaien
Hallo, danke für den Vorschlag, ich kam mit Regex, weil die Bedingungen tatsächlich ein bisschen komplizierter sind als die, die ich für das Beispiel verwendet habe, und ich dachte, der richtige Weg wäre Regex, denn manchmal ist das Schwierigste das Einfachste und ich wollte nicht mit String-Operationen kämpfen (das kann manchmal auch schwieriger sein). Wie auch immer, Sie haben recht und ich werde auf jeden Fall einen Blick darauf werfen, wenn ich das Problem mit der Regex nicht lösen kann, da es meine zweite Option war. – Nekeniehl
Müssen Sie eigentlich * ersetzen *? Nicht nur * Teile * der Strings extrahieren? '" 22X (34U (42O27)) "=>' "22 xor (34 und (42 oder 27))" ' –