Eine Regex "ODER" Verknüpfing

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
 
Hallo!
Danke erst einmal für die Antwort.
string pattern = "<td class=\" + qc + \">\\s*(.+?)\\s*</td>";
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!!!
 
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!
 
Zurück