Laden...

String mit Regex extrahieren

Erstellt von allgaeu73 vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.412 Views
A
allgaeu73 Themenstarter:in
17 Beiträge seit 2016
vor 8 Jahren
String mit Regex extrahieren

Hallo zusammen,
ich habe strings die so aussehen:

TRACK(6(2657,4331)(-2657,4331)),TRACK(6(-2657,4331)(-2657,-4331)),CIRCLE(296,294,-1378,3150)))

Aus diesem String möchte ich die X Werte in ein Array und die Y Werte in ein Array bringen, und zwar nur dann wenn es sich um einen TRACK handelt.
Ich tippe mal, dass es mit einem Regex gehen wird, nur habe ich viel zu wenig Ahnung von Regex.
Kann mir jemand weiterhelfen.
Danke

Gruß
Andreas

16.806 Beiträge seit 2008
vor 8 Jahren

Was hast Du denn bisher versucht?
[Artikel] Regex-Tutorial

A
allgaeu73 Themenstarter:in
17 Beiträge seit 2016
vor 8 Jahren

da ich tatsächlich keinen Schimmer habe, wie ich da ran gehen soll nicht wirklich viel..

16.806 Beiträge seit 2008
vor 8 Jahren

Dann kannste ja mit nem Tutorial mal beginnen und Dir anschauen, wie Regex funktioniert 😉
Ich hoff Du hast jetzt nicht erwartet, dass Dir das Forum den vollständigen Code generiert.. =)

A
allgaeu73 Themenstarter:in
17 Beiträge seit 2016
vor 8 Jahren

hab mir das Tutorial angeschaut....und Kopfweh bekommen.

Hätte jetzt mal angenommen splitte etwas das mit TRACK( anfängt du mit )) aufhört ... keine Ahnung

Werde mal rum probieren...

A
allgaeu73 Themenstarter:in
17 Beiträge seit 2016
vor 8 Jahren

Hallo zusammen,
hier meine Lösung, nicht schön aber geht 😃


					// Die CIRCLE Abschnitte mittels REGEX rausnehmen
				 	string test = Regex.Replace(fatf_package_data[package].ToString(),@"(CIRCLE)[(](\+|-)?\d+,(\+|-)?\d+,(\+|-)?\d+,(\+|-)?\d+\)","");
				    
				 	// Den Text TRACK raus nehmen
					test = Regex.Replace(test.ToString(),@"(TRACK)","");
					
				    MatchCollection koordinaten_paar;
				   
				    // Jetzt die X- und Y- Koordinaten mittel REGEX rausextrahieren				    
				    koordinaten_paar = Regex.Matches(test.ToString(),@"(\+|-)?\d+,(\+|-)?\d+");
				    ArrayList koordinaten_array = new ArrayList(koordinaten_paar);
				    
				    // x und y Array löschen
					x_array.Clear();
					y_array.Clear();
					
				    string[] koord_cols;

				    foreach (var inhalt in koordinaten_array)
				    {
				    	koord_cols = inhalt.ToString().Split(',');
						swOut.Write(koord_cols[0] + "/" + koord_cols[1] + "...");
				    	x_array.Add(koord_cols[0]);
				    	y_array.Add(koord_cols[1]);
				    }

16.806 Beiträge seit 2008
vor 8 Jahren

ArrayList sollte nicht verwendet werden. Das Ding ist untypisiert und steht einer List<T> in allem nach.
Ansonsten macht ein ToString angewendet auf einen string relativ wenig sinn.

T
111 Beiträge seit 2005
vor 8 Jahren

Hallo

Du könntest auch folgendes machen:


      string input = @"TRACK(6(2657,4331)(-2657,4331)),TRACK(6(-2657,4331)(-2657,-4331)),CIRCLE(296,294,-1378,3150)))";
      string pattern = @"((TRACK)\(\d\((?<X_Start>(\+|-)?\d*),(?<Y_Start>(\+|-)?\d*)\)\((?<X_Ende>(\+|-)?\d*),(?<Y_Ende>(\+|-)?\d*))";
      Regex regex = new Regex(pattern);
      var matches = regex.Matches(input);
      foreach (Match match in matches)
      {
        Console.Write("Start X : " + match.Groups["X_Start"].Value);
        Console.Write(" Y : " + match.Groups["Y_Start"].Value);
        Console.Write(" Ende X : " + match.Groups["X_Ende"].Value);
        Console.WriteLine(" Y : " + match.Groups["Y_Ende"].Value);
      }

lg Thomas

A
allgaeu73 Themenstarter:in
17 Beiträge seit 2016
vor 8 Jahren

@Abt: bin mit der Arraylist auch auf die Nase gefallen, habe jetzt eine typisierte List verwendet, läuft...
@Thomas:
Danke für den Hinweis, werde ich versuchen.

Gruß
Andreas