Entwickler-Ecke
Basistechnologien - Regex brauche Hilfe
_Joe_ - Mi 08.04.09 20:52
Titel: Regex brauche Hilfe
Hallo,
irgend sehe ich denn Wald vor lauter bäumen nicht.
mein String:
"-0.5 -0.18575 0.0125;";"0.5 0.18575 0.0125;";"0.5 -0.18575 0.0125;";"0.5 -0.18575 0.009000001;";"-0.5 -0.18575 0.009000001;";"-0.5 -0.16425 -0.0125;";"0.5 0.18575 -0.0125;";"-0.5 0.18575 -0.0125;";"-0.5 0.18575 0.0125;";"0.5 -0.16425 -0.0125;";
daraus sollen double werte werden. So sieht mein Ansatz aus:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| List<double> blub(string content) { List<double> mylist = new List<double>(); Regex regular = new Regex(????????????); foreach (string ss in regular.Split(content)) { mylist.Add(Convert.ToDouble(ss)); }
return mylist; } |
Kann mir vielleicht jemand bei dem regulären Ausdruck helfen?
Moderiert von
Kha: Topic aus IO, XML und Registry verschoben am Mi 08.04.2009 um 23:29
Kha - Mi 08.04.09 23:25
"helfen" ist gut, wenigstens ein Ansatz wäre schön gewesen :nixweiss: . Mit
und Regex.Match hättest du schonmal die Double-Dreierpacks in
Groups[2].Captures. Jetzt musst du noch das
... durch einen Ausdruck für diese Packs ersetzen.
_Joe_ - Do 09.04.09 12:12
Kann man irgendwie nach einem Anführungszeichen suchen bzw. wie trage ich Anführungszeichen in einen Regulären Ausdruck ein?
dachte an sowas: Regex regu = new Regex(" |;";|" "); und dann eben immer splitten wenn ein Leerzeichen, ;"; oder Anführungsstriche kommen.
*edit*
Regex regu = new Regex(" |;\";|\" ") funktioniert nur nicht ich bekomme dann "\"-0.5" warum auch immer :nixweiss:
*edit*
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| List<double> blub(string content) { CultureInfo en = new CultureInfo("en-US"); List<double> mylist = new List<double>(); content = content.Remove(content.Length - 3); content = content.Remove(0, 1); Regex regu = new Regex(" |;\";\""); foreach(string ss in regu.Split(content)) { mylist.Add(Convert.ToDouble(ss,en)); } for (int i = 0; i < 12;i++) { Console.WriteLine(mylist[i]); } return mylist; } |
hmm nicht schön aber funktioniert erstmal
bakachan - Do 09.04.09 13:20
Ich würde eher den Weg über Regex.Matches gehen anstatt zu splitten.
mit dem Regexpattern
Quelltext
1: 2:
| ([+-]*[0-9]+(.[0-9]+){0,1}) //editiert damit auch 0 gefunden wird |
Da müsstest du eine MatchCollection zurückkriegen die jede double-Zahl als Match enthält (kannst du einfach per Schleife dann durchlaufen)
_Joe_ - Do 09.04.09 13:46
bei deinem Beispiel wäre die Null ein Problem weil immer . vorkommen muss und eine Nachfolge Zahl
Kha - Do 09.04.09 14:01
Um die Zahlen würde ich mich gar nicht kümmern, das soll
double.Parse erledigen. Mein Ausdruck von oben wäre damit insgesamt
Die Captures von Gruppe 2 zerlegst du dann noch mit
string.Split(null) an den Leerzeichen, fertig.
_Joe_ - Do 09.04.09 15:52
ich habe mal Kha sein beispiel ausprobiert dabei erhalte ich:
C#-Quelltext
1: 2:
| Regex reg = new Regex("(\"([^\"]+);\";)+"); Match matches = reg.Match(content); |
base {System.Text.RegularExpressions.Group} = {"-0.5 0.03 0;";"0.1 0.03 0;";"-0.09999999 -0.03 0;";"0.5 -0.03 0;";}
Ich glaube das ist nichts ganz was du damit bewirken wolltest.
Wenn ich bakachan sein Beispielt ausprobier bekomme ich irgendwann eine Menge {0 0}.
Gibt es eine brauchbare Seite die, die Syntax der Regulären Ausdrücke beschreibt?
bakachan - Do 09.04.09 15:59
_Joe_ hat folgendes geschrieben : |
| Wenn ich bakachan sein Beispielt ausprobier bekomme ich irgendwann eine Menge {0 0}. |
Seltsam wenn ich das durch Regex-Lab jage (mit dem textbeispiel von dir oben) hab ich genau für jede double-Zahl nen Match in der Collection
Hier nen Regex-Tutorial:
http://www.mycsharp.de/wbb2/thread.php?threadid=41009
Kha - Do 09.04.09 16:17
_Joe_ hat folgendes geschrieben : |
| Ich glaube das ist nichts ganz was du damit bewirken wolltest. |
Doch, wahrscheinlich schon ;) . Mein Regex matcht ja den gesamten Text, danach musst du den Match wie schon zweimal beschrieben noch zerlegen.
_Joe_ - Do 09.04.09 19:32
bakachan hat folgendes geschrieben : |
_Joe_ hat folgendes geschrieben : | | Wenn ich bakachan sein Beispielt ausprobier bekomme ich irgendwann eine Menge {0 0}. |
Seltsam wenn ich das durch Regex-Lab jage (mit dem textbeispiel von dir oben) hab ich genau für jede double-Zahl nen Match in der Collection
Hier nen Regex-Tutorial:
http://www.mycsharp.de/wbb2/thread.php?threadid=41009 |
Das Beispiel ist nur raus gegriffen ich hab davon seitenweise in xml Dateien. Der Fehler tritt genau dann ein wenn eine Folge mit 0 0 kommt.
Danke schönes Tutorial.
Kha dir kann ich irgendwie nicht ganz folgen. :gruebel:
*edit*
C#-Quelltext
1:
| ("[+-]?[0-9]+([.][0-9]+)?"); |
So klappt es Danke euch beiden :zustimm:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!