saggi20
Goto Top

NET RegEx Block in Text finden

Hallo an alle,

ich lese zwar schon lange mit, aber jetzt habe ich doch eine Frage. Falls ich die Netiquette hier nicht so drauf habe: seid etwas nachsichtig face-smile

Ich habe das Problem, das ein RegeEx-Pattern, welches bei unterschiedlichen Test immer funktioniert, in meinem Programm keinen Match holt.

Folgender beispielhafter Text:
	Anderer Code in Varianten

    PROCEDURE EineProzedur@1234567();
    VAR
      Variable1@8888888888 : Integer;
      Variable2@9999999999 : Code[20];
    BEGIN
      IF Variable1 > 0 THEN
        EXIT;
      IF NOT Variable2 = 'TEST'  THEN  
        EXIT;
      END;
    END;
	
	Auch anderer Code in Varianten
und dieses Pattern:
PROCEDURE (.*?)@.*?;\r(.*?\n\s{4}END;)\r
liefert bei Regexstorm das gewünschte Ergebnis(zumindest wenn man nach dem Link die vier Leerzeichen vor dem letzten END wieder einfügt...).

Ich verwende folgenden Code in meinem Programm:
    Private Function FindProcedure(TextToFind As String) As Dictionary(Of String, String)
        Dim ReturnDict As New Dictionary(Of String, String)
        Dim pattern As String = "PROCEDURE (.*?)@.*?;\r(.*?\n\s{4}END;)\r"  
        Dim RegEx1 As New RegularExpressions.Regex(pattern, RegularExpressions.RegexOptions.IgnoreCase Or RegularExpressions.RegexOptions.Singleline)
        Dim matches As MatchCollection = Regex.Matches(TextToFind, pattern)
        For Each match As Match In matches
            ReturnDict.Add(match.Groups(0).Value, match.Groups(1).Value)
        Next
        Return ReturnDict
    End Function
und erhalte immer 0 Matches. Hat jemand eine Idee, was ich hier verkehrt mache?
Für das Zeilenende habe ich mehrere Varianten \r und \n probiert. Langsam bin ich am verzweifeln.

Vielen Dank und Grüße

saggi

Content-ID: 619399

Url: https://administrator.de/contentid/619399

Ausgedruckt am: 19.11.2024 um 13:11 Uhr

GNULinux
GNULinux 05.11.2020 um 17:27:04 Uhr
Goto Top
Dein Regexstorm Link liefert bei mir auch 0 Treffer. Was genau willst du extrahieren, den gesamten Code der Prozedur?
saggi20
saggi20 06.11.2020 um 07:19:12 Uhr
Goto Top
Hallo,

danke für deine Zeit.
Es soll der gesamte Text erfasst werden. Die erste Gruppe enthält den Namen der Prozedur, die zweite den Rest des Codes.

Der Regexstorm Link entfernt die Leerzeichen. Vier Leerzeichen vor dem letzten "END" und er findet was er soll.
2020-11-06_071639

saggi
146189
Lösung 146189 06.11.2020 aktualisiert um 11:12:19 Uhr
Goto Top
Dim t As String = IO.File.ReadAllText("D:\blablub.txt")  
Dim results As System.Text.RegularExpressions.MatchCollection = System.Text.RegularExpressions.Regex.Matches(t, "(?ism)^(\s*)PROCEDURE\s+([^\(]+)(.*?)^\1END;", RegexOptions.Compiled)  
For Each m As Match In results
     MsgBox(m.Value)
Next
saggi20
saggi20 06.11.2020 um 11:52:16 Uhr
Goto Top
Hallo window,

vielen Dank! Das hilft mir weiter.

saggi