RegEx Hilfe bei Stringspltittung RegEx Hilfe bei Stringspltittung
Danke Danke:  0
Ergebnis 1 bis 6 von 6
  1. 24.01.2013, 00:38
    #1
    Hallo Community, ich schreibe gerade an einer Chemie-App. Und zwar möchte ich die Edukte der Reaktionsgleichung (die Linke Seite einer Reaktionsformel zB. H2SO4 + NaCl .... ) in dem Fall H2SO4 und NaCl in jeweils dem String [FONT=Consolas]MolekülLeft[/FONT][0] und [FONT=Consolas]MolekülLeft[/FONT][1] haben. Bekomme aber mit dem Pattern nur H2SO4 in MolekülLeft[0]. Kann mir da jemand Helfen? Hier noch ein Bsp. Code:
    Code:
    [FONT=Consolas][FONT=Consolas][FONT=Consolas][FONT=Consolas][FONT=Consolas][FONT=Consolas]Regex[/FONT][/FONT][/FONT][FONT=Consolas][FONT=Consolas] rMolekülLeft = [/FONT][/FONT][FONT=Consolas][FONT=Consolas][FONT=Consolas]new[/FONT][/FONT][/FONT][FONT=Consolas][FONT=Consolas][FONT=Consolas]Regex[/FONT][/FONT][/FONT][FONT=Consolas][FONT=Consolas]([/FONT][/FONT][FONT=Consolas][FONT=Consolas][FONT=Consolas]"(?:([0-9]*((([A-Z]{1})[a-z]*)[0-9]*)*))"[/FONT][/FONT][/FONT][FONT=Consolas][FONT=Consolas]);       [/FONT][/FONT]
    [FONT=Consolas][FONT=Consolas][FONT=Consolas]
    [/FONT][/FONT][/FONT][FONT=Consolas][FONT=Consolas][FONT=Consolas]MatchCollection[/FONT][/FONT][/FONT][FONT=Consolas][FONT=Consolas] allMatchResultsMolekülLeft = rMolekülLeft.Matches(leftFormulaSide.Text);                    [/FONT][/FONT]
    [FONT=Consolas][FONT=Consolas][FONT=Consolas]
    [/FONT][/FONT][/FONT][FONT=Consolas][FONT=Consolas][FONT=Consolas]string[/FONT][/FONT][/FONT][FONT=Consolas][FONT=Consolas][] MolekülLeft = [/FONT][/FONT][FONT=Consolas][FONT=Consolas][FONT=Consolas]new[/FONT][/FONT][/FONT][FONT=Consolas][FONT=Consolas][FONT=Consolas]string[/FONT][/FONT][/FONT][FONT=Consolas][FONT=Consolas][allMatchResultsMolekülLeft.Count];[/FONT][/FONT]
    [FONT=Consolas][FONT=Consolas]
    [/FONT][/FONT][FONT=Consolas][FONT=Consolas][FONT=Consolas]for[/FONT][/FONT][/FONT][FONT=Consolas][FONT=Consolas] ([/FONT][/FONT][FONT=Consolas][FONT=Consolas][FONT=Consolas]int[/FONT][/FONT][/FONT][FONT=Consolas][FONT=Consolas] i = 0; i < allMatchResultsMolekülLeft.Count; i++)                                  [/FONT][/FONT]
    [FONT=Consolas][FONT=Consolas]            {
    
                    MolekülLeft[i] = allMatchResultsMolekülLeft[i].Groups[0].Value;
    
    [/FONT][/FONT][FONT=Consolas][FONT=Consolas]                MoleküleLeft.Text = MolekülLeft[0] + [/FONT][/FONT][FONT=Consolas][FONT=Consolas][FONT=Consolas]" "[/FONT][/FONT][/FONT][FONT=Consolas][FONT=Consolas] + MolekülLeft[1];[/FONT][/FONT]
    [FONT=Consolas][FONT=Consolas]
                }
    [/FONT][/FONT][/FONT][/FONT][/FONT]
    . Vielen Dank im voraus für eure Hilfe. Agredo
    0
     

  2. also der regex stimmt soweit. ganz nützlich ist für so was z.B. rick.measham.
    der Hund liegt in deinem for: du gehst nur bis allMatchResultsMolekülLeft.Count-1, weil du i
    Code:
    for (int i = 0; i <= allMatchResultsMolekülLeft.Count; i++)
    dann ist auch deine string deklaration seltsam:
    Code:
    string[] MolekülLeft = newstring[allMatchResultsMolekülLeft.Count];
    warum weist du dem string die Zeichenlänge zu, die der Anzahl deiner regex-Treffer entspricht?
    mach doch lieber
    Code:
    string MolekülLeft;
    . Die String-Klasse braucht nicht unbedingt einen Initiator.
    und: wenn du nur ein Molekül hast, bekommst du mit deinem String
    Code:
    MoleküleLeft.Text = MolekülLeft[0] + " " + MolekülLeft[1];
    auch unschöne Sachen. ich würde da
    Code:
    string strTrenner = " ";
    MolekülLeft = String.Join(strTrenner, allMatchResultsMolekülLeft);
    die Methode Join der Klasse String nimmt dann den Array der regexTreffer und fügt sie in der vorgegebenen Reihenfolge aneinander, dazwischen den strTrenner.
    0
     

  3. 24.01.2013, 10:34
    #3
    Vielen Dank fur deine Antwort. Bin immer wieder erstaunt wie schnell hier doch, produktive Antworten kommen


    Zitat Zitat von yjeanrenaud Beitrag anzeigen
    also der regex stimmt soweit. ganz nützlich ist für so was z.B. rick.measham.
    der Hund liegt in deinem for: du gehst nur bis allMatchResultsMolekülLeft.Count-1, weil du i<allMatchResultsMolekülLeft.Count; machst. mach <= , denn for prüft die bedingung for ausführung, nur do..while danach.

    Code:
    for (int i = 0; i <= allMatchResultsMolekülLeft.Count; i++)
    dann ist auch deine string deklaration seltsam:
    Code:
    string[] MolekülLeft = newstring[allMatchResultsMolekülLeft.Count];
    warum weist du dem string die Zeichenlänge zu, die der Anzahl deiner regex-Treffer entspricht?

    Also das mache ich, weil ich nicht mehr Strings haben möchte, als Treffer kommen. Jedes Molekül soll in einem eigenen String gespeichert werden. Oder denke ich da jetzt falsch?

    mach doch lieber
    Code:
    string MolekülLeft;
    . Die String-Klasse braucht nicht unbedingt einen Initiator.
    und: wenn du nur ein Molekül hast, bekommst du mit deinem String
    Code:
    MoleküleLeft.Text = MolekülLeft[0] + " " + MolekülLeft[1];
    auch unschöne Sachen. ich würde da
    Code:
    string strTrenner = " ";
    MolekülLeft = String.Join(strTrenner, allMatchResultsMolekülLeft);
    dieses mache ich nur um zu gucken ob überhaupt jedes Molekül in einem eigenen String gespeichert wird. Der Teil dient nur zu meiner Überprüfung. Das ist die Hauptaufgabe die dieser Code machen soll









    die Methode Join der Klasse String nimmt dann den Array der regexTreffer und fügt sie in der vorgegebenen Reihenfolge aneinander, dazwischen den strTrenner.
    Mit der kostenlosen PocketPC.ch App von meinem RM-821_eu_euro2_248 aus geschrieben.
    0
     

  4. 25.01.2013, 14:51
    #4
    Also ich habe jetzt rausgefunden, dass bei der Eingabe von H2O+H2SO4, MolekülLeft[0] "H2O", MolekülLeft[1] " "(also ein Leerzeichen, MolekülLeft[2] H2SO4 und MolekülLeft[3] " " enthält.

    jetzt ist meine Frage woher die Leerzeichen kommen?
    0
     

  5. Zitat Zitat von yjeanrenaud Beitrag anzeigen
    Code:
    for (int i = 0; i <= allMatchResultsMolekülLeft.Count; i++)
    Das wird so nicht funktionieren. Auflistungen werden ab 0 indiziert. Wenn eine Auflistung also 4 Elemente haben werden diese mit 0, 1, 2, 3 indiziert. 4 ist schon außerhalb.

    Ich glaube der reguläre Ausdruck ist nicht der den du haben möchtest.

    Ich glaube dieser hier tut was du möchtest:

    Code:
    ((?<educt>[^\s\+]+)[\s\+]+)+
    Insgesammt kann man das dann auf 3 Zeilen kürzen:

    Code:
                Regex rMolekülLeft = new Regex(@"((?<educt>[^\s\+]+)[\s\+]+)+");
    
                var allMatchResults = rMolekülLeft.Match(leftFormulaSide.Text).Groups["educt"].Captures.Cast<Capture> ().Select(a => a.Value);
    
                MoleküleLeft.Text = string.Join(" + ", allMatchResults);
    Ich glaube du hast den Unterschied zwichen group und capture nicht ganz verstanden, daher rührt der Denkfehler.

    LG pdelvo
    0
     

  6. oh stimmt, 0indiziert, ganz übersehen.
    0
     

Ähnliche Themen

  1. Hilfe bei HD2_CoreDroid_Desire_HD_GB_V3_RV
    Von Fabian Boszczar im Forum HD2 Android Builds NAND-Versionen
    Antworten: 7
    Letzter Beitrag: 28.07.2011, 10:57
  2. HILFE! Nexus One Warndreieck bei Rom/Radio Instalation HILFE!
    Von DonaldDuff im Forum Google Nexus One
    Antworten: 1
    Letzter Beitrag: 07.06.2011, 01:30
  3. Brauche hilfe bei dem Uhrzeitdisplay bei htc wildfire
    Von jeylin90 im Forum HTC Wildfire
    Antworten: 2
    Letzter Beitrag: 15.01.2011, 11:04
  4. [Hilfe] HTML und Regex
    Von Willey1986 im Forum Android Entwicklung
    Antworten: 6
    Letzter Beitrag: 05.07.2010, 11:18
  5. Hilfe, es fehlt bei mir der "Hintergrund" bei den SMS
    Von ohnesinn im Forum HTC HD2 Kommunikation
    Antworten: 4
    Letzter Beitrag: 14.01.2010, 06:53

Besucher haben diese Seite mit folgenden Suchbegriffen gefunden:

regex Captures.Cast().Select -sql

windows phone 7 class regex

regex windows phone android

regex hilfe

Stichworte