Laden...

String mit Regex extrahieren

Letzter Beitrag vor 9 Jahren 9 Posts 1.502 Views
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

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

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

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.. =)

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...

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]);
				    }

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.

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

@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