1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Eine Regex "ODER" Verknüpfing

Dieses Thema im Forum ".NET Web und Kommunikation" wurde erstellt von ahamm, 29. Dezember 2015.

  1. ahamm

    ahamm Mitglied

    Hallo @ all,
    irgendwie raffe ich das mit dem Regex nicht.
    Also ich habe mir einen html Schnipsel mit Selenium gholt und suche den normalerweise mit:

    MatchCollection MC1 = Regex.Matches(bla, "<td class=\"quotecell\">\\s*(.+?)\\s*</td>", RegexOptions.Singleline);
    dann bekomme alles was hinter dem "quotecell" ist.

    Wenn ich aber gerade zu einem unglücklichen Zeitpunkt zugreife steht nicht "quotecell" sondern "quotecell up" oder eben "quotecell down" dies wollte ich dann mit der folgenden Regex abfangen:

    MatchCollection MC1 = Regex.Matches(bla, "(<td class=\"quotecell\">\\s*(.+?)\\s*</td>)|(<td class=\"quotecell up\">\\s*(.+?)\\s*</td>)|(<td class=\"quotecell down\">\\s*(.+?)\\s*</td>)", RegexOptions.Singleline);

    diese tut aber nicht, alles was kein "quotecell" ist wird als leerer String übergeben und alles was "quotecell" ist wird ganz übergeben, sprich: <td class="quotecell">der gewünschte String</td>
    Ist mir noch zu helfen?:(
    Danke im Voraus
     
  2. Spyke

    Spyke Capoeirista Premium-User

    Ganz blöd würde ich jetzt prüfen:
    Code (Text):
    1. string qc="((quotecell up)|(quotecell down)|(quotecell))";
    2. string pattern = "<td class=\" + qc + \">\\s*(.+?)\\s*</td>";
    (ungetestet)

    mit regex gehen zwar auch conditions aber da tu ich mich selber schwer mit
    https://msdn.microsoft.com/en-us/library/az24scfc.aspx#grouping_constructs

    zum schnell testen
    http://regexlib.com/RETester.aspx

    P.S.:
    ich würde eventuell die Captures noch benennen (Namen geben)
    (zumindest den dessen Wert du haben willst).
     
  3. ahamm

    ahamm Mitglied

    Hallo!
    Danke erst einmal für die Antwort.
    das muss in C# so heißen:
    "<td class=\"" + qc + "\">\\s*(.+?)\\s*</td>";
    sonst kennt dieser ja das qc nicht.
    Leider funktioniert es nicht. Es wird einzig und allein jetzt die quotecell Varianten angezeigt.
    Hat Jemand noch nen anderen Tipp?
    Danke im Voraus!!!
     
  4. ahamm

    ahamm Mitglied

    Hallo nochmal,
    habe die Regex jetzt ein bisschen umgeschrieben und jetzt tut es soweit:

    string qc = "(quotecell up\">\\s*(.+?)\\s*</td>|quotecell down\">\\s*(.+?)\\s*</td>|quotecell\">\\s*(.+?)\\s*</td>)";
    string pattern = "<td class=\"" + qc;
    string bla = m.ToString();
    MatchCollection MC1 = Regex.Matches(bla, pattern, RegexOptions.Singleline);
    foreach (Match item in MC1)
    {
    string qc1 = ">\\s*(.+?)\\s*</td>";
    string itemnew = item.ToString();
    MatchCollection MC2 = Regex.Matches(itemnew, qc1, RegexOptions.Singleline);
    string test1 = MC2[0].Groups[1].Value;
    ShareValues.Add(test1);
    }
    nach dem ersten Pattern bekommt mann halt : quotecell ...">string den ich benötige</td>
    und dann ist es ganz einfach. Es wird nochmal nach dem was zwischen >den Zeichen steht</td>
    gefiltert.

    Danke an alle!