RegEx Problem

Sp1rit

Grünschnabel
Hallo zusammen!

Ich bin absolut kein Profi wenn es um reguläre Ausdrücke geht daher könnte ich eure Hilfe gebrauchen :)

Ich habe eine lange Liste von Strings like that:
200123456 9713344 12061857549 00024
200123456 9713344 12061831561 00010
200345678 9713346 12061813261 00012
200345678 9713346 12061834895 00003

Nun muss ich mit einem regulären Ausdruck jeweils alle auslesen die die selben 9 Anfangszahlen haben.
Also müssten es in diesem Fall zwei Matches sein:

200123456 9713344 12061857549 00024
200123456 9713344 12061831561 00010

und

200345678 9713346 12061813261 00012
200345678 9713346 12061834895 00003

Hat vielleicht jemand eine Idee?

Mein Ansatz war dieser:
Code:
(\d{9})[^([^(^\1)])]

Oder auch ein negative lookbehind:
Code:
^(\d{9})((?!^\1).)*

Funktioniert beides leider nicht...

lg
 
Zuletzt bearbeitet:

deepthroat

Erfahrenes Mitglied
Hi.

Mit welcher Art von reg. Ausdruck / in welcher Sprache willst du das denn machen?

Warum willst du es überhaupt mit reg. Ausdrücken machen?

Mit Perl:
Perl:
$s = "200769320 9716234 12061855449 00024
200769320 9716234 12061836161 00010
200769320 9716234 12061836161 asdf0
200769320 9716234 12061836161 00010
200769509 9716236 12061817361 00012
200769509 9716236 12061831895 00003";

my $i = 0;
while ($s =~ /^(\d{9}).*(?:\n\1.*)+/gm) {
	$i += 1;
	print "$i. match: $&$/";
}
 
Zuletzt bearbeitet:

Sp1rit

Grünschnabel
Eine genaue Sprachdefinition habe ich nicht. Gibt es da solche großen Unterschiede? Jedenfalls C-Basiert würde ich meinen.

Das ganze läuft über ein Framework zur Datenverarbeitung.
In dem Fall wird dann an Stelle des Matches ein XML Tag eingefügt und das Match an den jeweils nächsten Ablaufschritt weiter gegeben.

Hier ein Beispiel:

<tagDefinition regex="(?&lt;=^.{20}).{7}" tagName="myTag" matchSplit="M"></tagDefinition>

Daher geht leider kein weg an RegEx vorbei.

Lg
 

deepthroat

Erfahrenes Mitglied
Eine genaue Sprachdefinition habe ich nicht. Gibt es da solche großen Unterschiede?
Ja.

Du mußt schon wissen welche RegEx Engine verwendet wird. Manche RegEx Engines unterstützen keine Anker, manche unterstützen keine Backreferenzen, manche unterstützen keine Lookaround-Assertions...

Jedenfalls C-Basiert würde ich meinen.
Das sagt überhaupt nichts aus.
Hier ein Beispiel:

<tagDefinition regex="(?<=^.{20}).{7}" tagName="myTag" matchSplit="M"></tagDefinition>
Du kannst es ja mal mit dem obigen Ausdruck probieren. Evlt. kann man die Modifzierer auch im Ausdruck anschalten?
Code:
(?m)^(\d{9}).*(?:\n\1.*)+
Gruß
 

Sp1rit

Grünschnabel
Im RegEx-Tester für das Framework läuft alles super. In der Ausführung funktioniert es nicht, das liegt dann aber nicht an dem Ausdruck sondern wohl an einem Fehler im Framework.

Danke für deine Hilfe!