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-Key: 619399

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

Printed on: May 4, 2024 at 12:05 o'clock

Member: ASP.NET.Core
ASP.NET.Core Nov 05, 2020 at 16:27:04 (UTC)
Goto Top
Dein Regexstorm Link liefert bei mir auch 0 Treffer. Was genau willst du extrahieren, den gesamten Code der Prozedur?
Member: saggi20
saggi20 Nov 06, 2020 at 06:19:12 (UTC)
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
Mitglied: 146189
Solution 146189 Nov 06, 2020 updated at 10:12:19 (UTC)
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
Member: saggi20
saggi20 Nov 06, 2020 at 10:52:16 (UTC)
Goto Top
Hallo window,

vielen Dank! Das hilft mir weiter.

saggi