Entwickler-Ecke
Basistechnologien - Regex und String Problem
csharper - Di 14.10.08 11:27
Titel: Regex und String Problem
Hallöchen,
ich hab einen ganz langen String den ich nach Regulären Ausdrücken absuchen möchte.
nachdem ich schon einiges probiert habe, über Match , MatchCollections, etc. und nicht weiterkomme starte ich hier mal die Frage.
Wie sieht die Funktion aus um einen String nach Regulären Ausdrücken zu durchsuchen, diese auszufiltern und in eine List<string> einzufügen. Wie gesagt ich komm nicht weiter.
Hoffe das mir hier einer helfen kann.
Greetz
lothi - Di 14.10.08 14:24
Hallo
Ohne Worte:
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:
| using System; using System.Text.RegularExpressions;
public class Test {
public static void Main () {
Regex rx = new Regex(@"\b(?<word>\w+)\s+(\k<word>)\b", RegexOptions.Compiled | RegexOptions.IgnoreCase);
string text = "The the quick brown fox fox jumped over the lazy dog dog."; MatchCollection matches = rx.Matches(text);
Console.WriteLine("{0} matches found.", matches.Count);
foreach (Match match in matches) { string word = match.Groups["word"].Value; int index = match.Index; Console.WriteLine("{0} repeated at position {1}", word, index); } } } |
Gruss Lothi
bakachan - Di 14.10.08 14:39
Titel: Re: Regex und String Problem
csharper hat folgendes geschrieben : |
nachdem ich schon einiges probiert habe, über Match , MatchCollections, etc. und nicht weiterkomme starte ich hier mal die Frage.
Wie sieht die Funktion aus um einen String nach Regulären Ausdrücken zu durchsuchen, diese auszufiltern und in eine List<string> einzufügen. |
Eigentlich hast du alles wichtige schon drinn MatchCollection und List<string>
Wenn du dir die Matches deines Regex als Matchcollection zurückgeben lässt kannst du diese per schleife durchlaufen und jeden treffer in deine Liste einfügen
C#-Quelltext
1: 2: 3: 4: 5:
| List<string> result = new List<string>(); Regex regex = new Regex(strMuster); MatchCollection matches = regex.Matches(strText); foreach (Match match in matches) result.Add(match.Value) |
csharper - Do 16.10.08 11:13
Hi,
eigentlich klappt es soweit, ich habe nur das Problem, dass ich meinen String nach dem Regex absuche, wenn dieser gefunden wird, soll 2 Zeichen vorgegangen werden und die Zeichen dazwischen bis zu einem definierten Endpunkt ausgegeben werden, also nicht der Regex, sondern das was darauf folgt.
Bis jetzt hab ich das folgendermaßen gemacht:
C#-Quelltext
1: 2: 3: 4: 5: 6:
| int startindex = element.IndexOf(start) + start.Length + 2; int endindex = element.IndexOf(end, startindex) - 1;
string id = element.Substring(startindex, endindex - startindex);
FilteredIDs.Add(id); |
Das hab ich dann in foreach gehabt. Wie kann ich das auf MatchCollection und List<string> anwenden? Also wie kann ich nur die zeichen dazwischen ausgeben, IndexOf gibts ja nicht für MatchCollections.
csharper - Do 16.10.08 12:00
Hi,
hab meinen Regex angepasst und jetzt klappts ;-)
Man bin ich froh das es endlich so funktioniert wie ich möchte.
Danke an alle die mir geholfen haben
Greetz :lol:
bakachan - Do 16.10.08 12:05
| Zitat: |
| meinen String nach dem Regex absuche, wenn dieser gefunden wird, soll 2 Zeichen vorgegangen werden und die Zeichen dazwischen bis zu einem definierten Endpunkt ausgegeben werden, also nicht der Regex, sondern das was darauf folgt. |
Und warum das was darauf folgt und nciht der regex? das ist doch schwachsinn (sorry).
Such mit deinem Regex doch einfach direkt das was du brauchst.
Wenn das was davorsteht als bedingung gelten soll baust du in dein regex-muster einen Lookbehind und fertig.
z.B. wenn wir ab und zu in einem Text die Zeichenfolge "ABC" und danach 2 Zahlen haben und du die 2 Zahlen willst
Dann suchst du ja prinzipiell mit deinem Regex nach :
[0-9]{2} (also 0 bis 9 und das 2 mal)
jetzt noch der lookbehind der angibt das vorher die Zeichen folge ABC stehen muss :
(?<=ABC)[0-9]{2}
dieser Regex würde alle 2-stelligen zahlen matchen die nach der Zeichenfolge ABC kommen und im Value hättest du dann nur die 2stellige Zahl
anstelle der zahl kannst auch einfach .{2} machen dann haste 2 beliebige Zeichen
csharper - Di 21.10.08 11:39
Habs hinbekommen, danke danke
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!