Laden...

String auswerten mit Regex

Erstellt von Krumnix vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.796 Views
K
Krumnix Themenstarter:in
129 Beiträge seit 2018
vor 6 Jahren
String auswerten mit Regex

Hallo.

Bin grad dabei mich in Regex einzuarbeiten. Gefällt mir soweit sehr gut, aber ich blicke noch nicht bei allem durch.

Ich habe z.B. folgenden Inhalt in einem String:


  Zeit_AufProzent :=\n
      tTimeOut\n
      * INT_AufProzentsatz\n
      /100

oder


  Zeit_AufProzent :=\n
      tTimeOut * INT_AufProzentsatz / 100

oder


  Zeit_AufProzent :=\n // Das ist ein Kommentar
      tTimeOut * INT_AufProzentsatz / 100

Ich würde nun gerne die Variablen-Namen, das Zuweisungszeichen sowie die Rechenzeichen auflösen (Steuerzeichen \n soll dabei entfernt werden, Kommentar, wenn vorhanden, soll ans Ende des StringArrays).

Wie kann ich mir nun den Regex-Separator vorstellen?

16.842 Beiträge seit 2008
vor 6 Jahren

Was hast Du bisher probiert? Das Forum ist kein Regex-Pattern Generator 😃

[Artikel] Regex-Tutorial

K
Krumnix Themenstarter:in
129 Beiträge seit 2018
vor 6 Jahren

Meine 1. Version war:

[a-zA-Z]\s+:=\s+[a-zA-Z0-9]\s+[+-*/]{1-8}

Ergebnis: StringArray leer

  1. Version:
[a-zA-Z_]{1,30}\s+:=\s+[a-zA-Z_]{1,30}\s+[+\-*\/]{1,8}

Ergebnis: Auch leer

  1. Version zum Testen:
\S\s:=

Ergebnis:

String[0] = "t :="

  1. Version:
[a-zA-Z_]{1,30}\s:=

Ergebnis:

String[0] = "Zeit_AufProzent :="

Aber ich möchte ja:

String[0] = "Zeit_AufProzent"
String[1] = ":="
String[2] = "tTimeOut"
K
Krumnix Themenstarter:in
129 Beiträge seit 2018
vor 6 Jahren

Antworte mir mal selbst 😃

Habe gerade

(\S+)\s:=\s(\S+)\s(\S+)\s(\S+)\s(\S+)

versucht.

Ergebnis:


String[0] = "Zeit_AufProzent"
String[1] = "tTimeOut"
String[2] = "*"
String[3] = "INT_AufProzentsatz"
String[4] = "/100"

Schon "besser", aber /100 noch "falsch" und wenn ich mehr Ausdrücke drin habe, werden die nicht ausgewertet (sprich nach /100 kommt noch +20*Temp10)

2.207 Beiträge seit 2011
vor 6 Jahren

Hallo Krummnix,

hast du https://regex101.com/ mal probiert?

Gruss

Coffeebean

K
Krumnix Themenstarter:in
129 Beiträge seit 2018
vor 6 Jahren

Ja, hab ich grad gefunden, daher auch meine eigene Antwort 😃
Damit kann man schön testen.

Ich komme der Sache näher...

5.658 Beiträge seit 2006
vor 6 Jahren

Hi Krumnix,

Ich würde nun gerne die Variablen-Namen, das Zuweisungszeichen sowie die Rechenzeichen auflösen (Steuerzeichen \n soll dabei entfernt werden, Kommentar, wenn vorhanden, soll ans Ende des StringArrays).

Ich befürchte, bei diesen Anforderungen kommst du mit RegEx nicht besonders weit. Was du brauchst, ist ein Parser, der deine Eingabe in einzelne Ausdrücke zerlegt, und diese in einer Baumstruktur anordnet. Danach kannst du dann aus dem Baum wieder die Formeln als Text generieren, Variablen ersetzen, und Kommentare positionieren. Als Anregung hilft dir vielleicht: Parser für mathematische Formeln

Weeks of programming can save you hours of planning

K
Krumnix Themenstarter:in
129 Beiträge seit 2018
vor 6 Jahren

Bingo.

Das hab ich eigentlich gesucht.

Feine Sache! Danke!

2.298 Beiträge seit 2010
vor 6 Jahren

Hallo,

ich habe mal etwas gebastelt. Eventuell kannst du darauf aufbauen. Für dein erstes Beispiel funktioniert der Regex.


\s*(?<result>\w+).*\\n\s+(?<first>\w+).+\*\s+(?<second>\w+).+/\s*(?<third>[0-9]*)

Bis auf die Kommentare sollte das eigentlich fast für alle Varianten greifen.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |