Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
String mit Regex extrahieren
allgaeu73
myCSharp.de - Member



Dabei seit:
Beiträge: 17

Themenstarter:

String mit Regex extrahieren

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15818
Herkunft: BW

beantworten | zitieren | melden

Was hast Du denn bisher versucht?
[Artikel] Regex-Tutorial
private Nachricht | Beiträge des Benutzers
allgaeu73
myCSharp.de - Member



Dabei seit:
Beiträge: 17

Themenstarter:

beantworten | zitieren | melden

da ich tatsächlich keinen Schimmer habe, wie ich da ran gehen soll nicht wirklich viel..
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15818
Herkunft: BW

beantworten | zitieren | melden

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.. =)
private Nachricht | Beiträge des Benutzers
allgaeu73
myCSharp.de - Member



Dabei seit:
Beiträge: 17

Themenstarter:

beantworten | zitieren | melden

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...
private Nachricht | Beiträge des Benutzers
allgaeu73
myCSharp.de - Member



Dabei seit:
Beiträge: 17

Themenstarter:

beantworten | zitieren | melden

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]);
				    }
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15818
Herkunft: BW

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
thomas.at
myCSharp.de - Member



Dabei seit:
Beiträge: 102
Herkunft: Österreich / Wien

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
allgaeu73
myCSharp.de - Member



Dabei seit:
Beiträge: 17

Themenstarter:

beantworten | zitieren | melden

@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
private Nachricht | Beiträge des Benutzers