pattern-Erkennung

ukulele

Datenbank-Guru
Beiträge
5.144
Ich habe ein recht komplexes Script was mir aus einer Textmeldung (die mir nunmal nicht anders vorliegt) mehrere Informationen extrahiert. Wenn es eine Information findet, schreibt es sie in eine extra Tabelle und ersetzt die Information erstmal durch einen Platzhalter #00#. Anhand dieses Platzhalters orientiere ich mich dann ggf. erneut und suche nach Informationen, die explizit auf diesen Platzhalter folgen.

Das ganze läuft in Schleifen, denn es kann mehrere Treffer in einem Text geben. Und hier stoße ich im wesentlichen auch auf mein Problem. Ich demonstriere das mal an einem Beispiel:
Code:
DECLARE   @text VARCHAR(8000)
SET     @text = '
Hallo Welt

#01# hallo, welt, die ganze.
#02# wusa, asdf, qwert, 1qqq.'

IF     @text LIKE '%#[0-9][0-9]# %, %, %, %.%'
BEGIN
   SELECT   left(@text,patindex('%#[0-9][0-9]# %, %, %, %.%',@text)-1) AS text_links,
       right(@text,datalength(@text)-patindex('%#[0-9][0-9]# %, %, %, %.%',@text)-3) AS text_rechts
END
Dieser Text beinhaltet bereits zwei Platzhalter an mir unbekannten stellen. Es folgen Informationen von unbestimmter Länge, in dem ersten Fall mit 3 Werten, im zweiten Fall mit 4 Werten die durch ein Komma getrennt werden und abschließend mit einem Punkt enden. Dahinter oder dazwischen kann alles stehen oder eben auch nicht.

Wenn von dem LIKE die Existenz des Musters im Text erkannt wird suche ich mir mit patindex() den Einstiegspunkt und durchlaufe ihn dann bis zum Punkt. Und hier stoße ich auch auf mein Problem:
Ich muss mit % arbeiten weil mein Text eine unbekannte Länge hat. Wenn ich mit % arbeite, kann da aber eben auch ein Zeichen wie ein Punkt oder eine Raute drin stehen, das ist SQL egal. Genau das passiert hier. Mein Pattern beginnt hinter #01#, endet aber erst am Punkt hinter #02#.

Kennt jemand einen Weg, Zeichen in beliebiger Menge zu erlauben aber bestimmte Zeichen davon auszuschließen? Ich habe mir schon regular expressions angesehen aber bin neu auf dem Gebiet und behersche kein .NET. Am liebsten würde ich auf reguläre Ausdrücke verzichten da mein Script bisher nur in diesem einen Fall hakt.
 
Werbung:
Zurück
Oben