| Autor |
Beitrag |
_Joe_
      
Beiträge: 47
Arch Linux/XP
VS2008 Prof.,Codeblocks
|
Verfasst: Mi 08.04.09 20:52
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
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Mi 08.04.09 23:25
"helfen" ist gut, wenigstens ein Ansatz wäre schön gewesen  . Mit
Quelltext
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_ 
      
Beiträge: 47
Arch Linux/XP
VS2008 Prof.,Codeblocks
|
Verfasst: 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
*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
      
Beiträge: 503
Erhaltene Danke: 34
W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
|
Verfasst: 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)
Zuletzt bearbeitet von bakachan am Do 09.04.09 16:03, insgesamt 2-mal bearbeitet
|
|
_Joe_ 
      
Beiträge: 47
Arch Linux/XP
VS2008 Prof.,Codeblocks
|
Verfasst: Do 09.04.09 13:46
bei deinem Beispiel wäre die Null ein Problem weil immer . vorkommen muss und eine Nachfolge Zahl
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: 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
Quelltext
Die Captures von Gruppe 2 zerlegst du dann noch mit string.Split(null) an den Leerzeichen, fertig.
_________________ >λ=
|
|
_Joe_ 
      
Beiträge: 47
Arch Linux/XP
VS2008 Prof.,Codeblocks
|
Verfasst: 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
      
Beiträge: 503
Erhaltene Danke: 34
W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
|
Verfasst: 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:
www.mycsharp.de/wbb2...d.php?threadid=41009
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: 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.
Einloggen, um Attachments anzusehen!
_________________ >λ=
|
|
_Joe_ 
      
Beiträge: 47
Arch Linux/XP
VS2008 Prof.,Codeblocks
|
Verfasst: Do 09.04.09 19:32
|
|