2017-08-25 6 views
1

Ich arbeite mit Daten von einem DB, der Informationen über Transaktionen erzeugt.Regex, um String zu entsprechen, gefolgt von verschiedenen Formaten

Das Problem besteht darin, dass Transaktionen eine beliebige Anzahl verwandter Attribute aufweisen können und Transaktionsdetails mit einer neuen Zeile für jedes Attribut repliziert werden.

Im Format:

[Transaktions-ID] [Tab] [name Attribut] [Tab] [Attributwert] [Tab] [Datum]

Beispiel:

11111 Amount 12000 
11111 Reference 101010 
11111 Operator John 
11111 Subject Credit 
11111 Notes XXXXXXXX 
11112 Amount 75000 
11112 Reference 202020 
11112 Operator Will 

Ich versuche, einen REGEX-Ausdruck für jedes Attribut zu finden, das mit der folgenden Logik übereinstimmt;

"Betrag" - gefolgt von TAB - gefolgt von variable Längenzahl - gefolgt von TAB

"Referenz" - gefolgt von TAB - gefolgt von variabler Länge Nummer - gefolgt von TAB

"Operator" - gefolgt von TAB - gefolgt von Zeichenkette variabler Länge - gefolgt von TAB

"Betreff" - gefolgt von TAB - gefolgt von Zeichenkette variabler Länge - gefolgt von TAB

"Notes" - gefolgt von TAB - gefolgt von Zeichenkette variabler Länge - gefolgt von TAB

Antwort

1

Diese Antwort gilt mehr alle Attribute zu lesen, die auf die gleiche Transaktions-ID gehören. Werfen Sie einen Blick auf regex101.com

(?s)         // dot matches newline 
(?<tid>\d+)        // transactionid 
\t 
(?:Amount\t(?<amount>\d+))    // amount 
.\1\t         // newline, transactionid, tab 
(?:Reference\t(?<ref>\d+))    // reference 
.\1\t         // newline, transactionid, tab 
(?:Operator\t(?<ope>\w+))    // operator 
(?:.\1\t(?:Subject\t(?<sub>\w+)))?  // possible subject 
(?:.\1\t(?:Notes\t(?<not>\w+)))?  // possible notes 
(?!\1)         // negative lookahead 

Für eine einfache Erklärung, die Sie wollen Attribute lesen, bis die Transaktion-ID eine andere ist.

0

Ein regex wie diese

(?<transactionid>\d+)\t(?<attribute>Amount|Reference|Operator|Subject|Notes)\t(?<value>\w+) 

tun.

Blick auf regex101.com

Erläuterung:

(?<transactionid>\d+)         // transaction id 
\t              // followed by tab 
(?<attribute>Amount|Reference|Operator|Subject|Notes) // attribute 
\t              // followed by tab 
(?<value>\w+)           // value 
+0

Hallo, vielen Dank dafür. – AlexM

+0

Bedeutet das, dass ich Folgendes verwenden würde: (? \ d +) \ t (? ) \ t (? \ w +) (? \ d +) \ t (? ) \ t (? \ w +) (? \ d +) \ t (? ) \ t (? \ w +) (? \ d +) \ t (? ) \ t (? \ w +) (? \ d +) \ t (? ) \ t (? \ w +) – AlexM

+0

Warte, das ändert möglicherweise deine ursprüngliche Frage. Ihre Frage könnte bedeuten, dass Sie alle Attribute auf einmal lesen möchten. Ich werde ein neues Beispiel auf Regex101 erstellen. –

Verwandte Themen