Entwickler-Ecke
Basistechnologien - [c#] Regex Klasse
vreden123 - Mo 08.03.10 10:10
Titel: [c#] Regex Klasse
Hallo ich habe eine Frage zu der Regex Klasse.
Meine Seite hat folgenden Quelltext:
treffer>1<treffer
treffer>2<treffer
treffer>3<treffer
treffer>4<treffer
treffer>4<treffer
treffer>5<treffer
Und ich folgendem C# Code habe:
C#-Quelltext
1: 2: 3: 4:
| glink = "Adresse zur Seitel"; arr = client.DownloadString(glink); Regex r = new Regex("treffer>(.*)<treffer"); string treffer = r.Match(arr).Groups[1].Value; |
Dann hat die Variable "treffer" den wert 1.
Kann man das mit der Regexklasse so machen das die Variable treffer nicht den Wert 1 hat sondern den Wert 2. Also das das zweite gefundene Ergebnis in der Variable treffer geschrieben wird?
PS: Google hab ich schon durchsucht aber nichts gefunden.
Moderiert von
Christian S.: C#-Tags hinzugefügtModeriert von
Christian S.: Topic aus ASP.NET und Web verschoben am Mo 08.03.2010 um 12:19
danielf - Mo 08.03.10 10:41
Hallo,
mit Matches bekommst du jeden Treffer bzw. eine MatchCollection für dein Pattern zurück. Diese kannst du indizieren.
Gruß Daniel
PS: Code als Code mit
und-Tag deklarieren und mit (?<group_name><pattern>) kannst du benannte Groupen erstellen.
Bsp:
C#-Quelltext
1: 2: 3: 4:
| foreach(var item in Regex.Matches("trffer>(?<value>.*?)<treffer")) { Console.WriteLine(item.Group["value"].Value); } |
vreden123 - So 14.03.10 14:27
Das habe ich jetzt soweit gemacht. Aber es kommt immer noch eine Fehlermeldung:
Für das nicht statische Feld, die Methode oder Eigenschaft
"System.Text:regularExpressions.Regex.Matches(string)" ist ein Objektverweis erforderlich.
Was heist das?
Ich bin leider noch nicht so erfahren und möchte es lernen.
Christian S. - So 14.03.10 14:34
Zeig doch mal bitte Deinen Quellcode :)
vreden123 - So 14.03.10 15:00
Den Oben genannten fehler bin ich jetzt los.
Ich poste als erstes man den Quellcode:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48:
| using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net; using System.Text.RegularExpressions; using System.IO; using System.Collections;
namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
private void Form1_Load(object sender, EventArgs e) {
}
private void button1_Click(object sender, EventArgs e) { using (WebClient client = new WebClient()) { string glink; string arr; client.Headers["User-Agent"] = "Mozilla/4.0 (Compatible; Windows NT 5.1; MSIE 6.0) (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"; glink = "http://wbsucher.square7.ch/neu/test.html"; arr = client.DownloadString(glink); Regex r = new Regex("treffer>(.*)<treffer"); foreach (var item in r.Matches("treffer>(?<value>.*?)<treffer")) {
label4.Text = item.Groups[1].Value; } } } } } |
Bei
label4.Text = item.Groups[1].Value;
mekrt er das:
"objekt" enthält keine Definition für "Groups", und es konnte keine Erweiterungsmethode "Groups" gefunden werden, die ein erstes Argument vom Typ "objekt" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?)
Kann mir da jemand helfen?
Moderiert von
Christian S.: C#-Tags hinzugefügt
Christian S. - So 14.03.10 15:07
Da habe ich mich schon so oft drüber geärgert ...
MatchCollection implementiert nur die "alten" Interfaces
ICollection und
IEnumerable, aber z.B. nicht
IEnumerable<Match>. Du musst den Typ in der foreach-Schleife also explizit angeben:
C#-Quelltext
1:
| foreach (Match item in r.Matches("treffer>(?<value>.*?)<treffer")) |
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!