2016-11-15 1 views
1

Ich versuche, mit RegEx mehrere Zeilen zusammenzufassen. Hier ist ein Beispiel von Text Ich suche:VB Net RegEx Match Mehrere

Total 
2015 
DOLLAR 
AMOUNT 
Oct-15 DIFF 15-16 
Total 
2015 
COMPANY 1 - WI 
Nuts $ 59.85 $ 0.00 $ 135.45 $ 0.00 $ 135.45 $0.00 
Bolts $ 0.00 $ 0.00 $ 0.00 $ 0.00 $ 0.00 $0.00 
Screws $ 449.20 $ 0.00 $ 541.23 $ 0.00 $ 541.23 $0.00 
Total 7765: $ 509.05 $ 0.00 $ 676.68 $ 0.00 $ 676.68 $0.00 
Company 2 - NE 
Nuts $ 0.00 $ 0.00 $ 0.00 $ 0.00 $ 0.00 $0.00 
Bolts $ 0.00 $ 55.67 $ 542.48 $ 719.82 $(177.34) $777.02 
Total 1876: $ 0.00 $ 55.67 $ 2,960.52 $ 4,265.82 $(1,305.30) $5,854.60 
Company 3 - MN 
Nuts $ 109.52 $ 606.52 $ 858.36 $ 606.52 $ 251.84 $606.52 
Paper $ 0.00 $ 0.00 $ 483.82 $ 0.00 $ 483.82 $678.30 
Gas $ 0.00 $ 0.00 $ 0.00 $ 0.00 $ 0.00 $0.00 
OTHER $ 521.49 $ 0.00 $ 521.49 $ 0.00 $ 521.49 $0.00 
Total 6524: $ 631.01 $ 606.52 $ 3,909.09 $ 606.52 $ 3,302.57 $1,284.82 
Company 4 - IA 
Anything $ 0.00 $ 0.00 $ 0.00 $ 0.00 $ 0.00 $0.00 
Other $ 0.00 $ 0.00 $ 171.90 $ 0.00 $ 171.90 $0.00 
Total 1123: $ 0.00 $ 0.00 $ 171.90 $ 0.00 $ 171.90 $0.00 

Ich versuche, die Firmennamen zu ziehen und die gesamte Linie in Gruppen. Wenn ich es auf mehrzeilig und verwenden Sie

^(.+?\s-\s.{2})$ 

Das wird mir den Firmennamen. Ich habe auch schon versucht, diese:

^(.+\s-\s\w{2}|Total\s\d{1,5}:.+)$ 

, dass beide Linien erhalten und wird funktionieren, aber sie kommen sowohl als Gruppe durch 1. Gibt es eine Möglichkeit, um sicherzustellen, dass sie zusammenpassen? Also wäre Gruppe 1 der Firmenname und Gruppe 2 wäre die Gesamtlinie? Ich habe versucht, etwas wie diese in der Mitte hinzuzufügen, aber es hat nicht funktioniert, weil es eine unterschiedliche Anzahl von Linien zwischen den Firmen und den Gesamtlinien gibt.

^(.+\s-\s\w{2})$(^.+$){1,20}^(Total\s\d{1,5}:.+)$ 

(ich weiß nicht mehr genau, was ich hatte, aber es war mir die Mitte lines..just nicht immer die richtige Anzahl von ihnen.) Gibt es eine Möglichkeit, diese Linien zwischen den Firmennamen überspringen und ihre jeweilige Gesamtlinie und haben Gruppe 1 den Kundennamen und Gruppe 2 die Gesamtlinie sein?

+0

Ich sollte hinzufügen, dass es nicht "Firma 1" oder "Firma 2" ist, aber es beginnt immer am Anfang der Zeile und enthält "- XX" für den Staat. Ich möchte nur diese ganze Zeile und ich kann sie für Name und Status aufteilen. –

Antwort

0

Ich war in der Lage zu bekommen, was ich für mit diesen suchen:

^(.*\s-\s\w{2})$\n(^.+$\n)+?^Total\s(\d{2,5}:.+)$ 

Es gibt mir den Namen des Kunden in der Gruppe 1 und die Gesamtlinie in Gruppe 3 und ich kann Gruppe 2 ignorieren. Danke.

+0

Ich habe es so geändert:^(. * - \ w {2}) $ \ n (?> ^. + $ \ N) +?^TOTAL \ s (\ d {2,5}:. +) $ so dass ich nur Gruppe 1 und Gruppe 2 erhalte. Ich habe gelernt, dass man Muster nicht einfangen kann. :) –

0

Versuchen Sie folgendes:

^(.+\s-\s\w{2})$|^(Total\s\d{1,5}:.+)$ 

Demo: https://regex101.com/r/8r8ZS0/1

+0

Das macht etwas, was ich vorher hatte (obwohl es sie in Gruppen trennt). Das Problem ist, dass ich, wenn ich durch die Matches fahre, immer im Auge behalten muss, auf welcher Seite ich bin. Ich würde gerne in der Lage sein, durchzulaufen und den Kundennamen und die Gesamtsumme in einem Durchgang zu bekommen, wenn es möglich ist. Ich möchte, dass Spiel 1 Gruppe 1 und Gruppe 2 zusammen hat. Einfacher zu durchlaufen. –

+0

@J_K_M_A_N Nicht erfassbare Muster können in der Tat helfen, die Ergebnisse zu bereinigen. Hoffe, du kannst die Ergebnisse jetzt besser lesen. – Ibrahim