Autor Beitrag
csharper
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42



BeitragVerfasst: Di 14.10.08 11:27 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 114
Erhaltene Danke: 3



BeitragVerfasst: Di 14.10.08 14:24 
Hallo

Ohne Worte:

ausblenden volle Höhe 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 ()
    {

        // Define a regular expression for repeated words.
        Regex rx = new Regex(@"\b(?<word>\w+)\s+(\k<word>)\b",
          RegexOptions.Compiled | RegexOptions.IgnoreCase);

        // Define a test string.        
        string text = "The the quick brown fox  fox jumped over the lazy dog dog.";
        
        // Find matches.
        MatchCollection matches = rx.Matches(text);

        // Report the number of matches found.
        Console.WriteLine("{0} matches found.", matches.Count);

        // Report on each match.
        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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: Di 14.10.08 14:39 
user profile iconcsharper hat folgendes geschrieben Zum zitierten Posting springen:
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

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42



BeitragVerfasst: 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:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42



BeitragVerfasst: Di 21.10.08 11:39 
Habs hinbekommen, danke danke