Guten Abend,
ich versuche hier mit VB.net aus mehreren große Textdateien
rauszufiltern, was ich benötige.
In den Dateien befinden sich alle möglichen Buchstaben, Zahlen,
Sonderzeichen...
für mich relevant ist alles, was mit 02 A1 beginnt, und mit 03 endet.
Allerdings nur, wenn 14 Zeichen ohne Leerzeichen, und 22 Zeichen mit
Leerzeichen zwischen "02 A1" und "03" sind. -> Das filtert
unvollständige Einträge heraus.
Die Textdateien sehen wie folgt aus (Beispiel-Ausschnitt):
1 | 001697: 2022-01-14 14:03:42,1513956 +0,0000023
|
2 |
|
3 |
|
4 | 02 A1 03 02 A1 03 02 A1 03 02 A1 03 02 A1 03 02
|
5 | A1 71 F0 FF FF 00 92 AA 03 02 A1 03 02 A1 03 02
|
6 | A1 03
|
Aus diesem Auszug würde ich nun also
1 | 02 A1 71 F0 FF FF 00 92 AA 03
|
erhalten wollen.
Mein RegEx Code sieht so aus:
1 | Dim sourcestring As String = ""
|
2 | Try
|
3 | Using textReader As New System.IO.StreamReader("pfad-zur-txt")
|
4 | sourcestring = textReader.ReadToEnd
|
5 | End Using
|
6 | Catch ex As Exception
|
7 | MsgBox(ex.Message)
|
8 | End Try
|
9 |
|
10 | Dim re As Regex = New Regex("02 A1 (.{18,22}?) 03", RegexOptions.Multiline Or RegexOptions.Singleline)
|
11 | Dim mc As MatchCollection = re.Matches(sourcestring)
|
12 | Dim mIdx As Integer = 0
|
13 | For Each m As Match In mc
|
14 | gefiltert.Text &= m.value
|
15 | mIdx += 1
|
16 | Next
|
Nun das Problem:
Aus mir unerklärlichem Grund wird in der gefiltert.Textbox auch
1 | 02 A1 03 02 A1 03 02 A1 03
|
angezeigt! In dachte, dass in meinem RegEx Pattern ganz klar steht,
alles zwischen 02 A1 und 03 NUR matchenm wenn mindestens 18 Zeichen
("(.{18,22}?)") - warum also wird 02 A1 03 gemachted?
So, wenn ich nun
1 | RegexOptions.Multiline Or RegexOptions.Singleline
|
zu NUR Multiline ändere, hab ich das Problem nicht mehr! Dann
funktioniert es, wie es soll.
Dann allerdings (ohne SingeLine) wird bei folgendem Text nicht
gematched:
1 | 02 A1 71 F0 FF FF 00
|
2 | 94 00 03
|
Warum? Keine Ahnung...
Kann mir hier jemand auf die Sprünge helfen und auch erklären was ich
falsch mache?
Danke schon im Voraus