Autor Beitrag
BlackMatrix
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243
Erhaltene Danke: 1



BeitragVerfasst: Do 07.01.10 22:27 
Eigentlich bin ich gut informiert in Sachen Regular Expressions, aber irgendwie finde ich gerade nicht die Lösung für mein Problem.

Ich möchte gerne

Zitat:
Meine RegEx:

ausblenden C#-Quelltext
1:
benutzer=[\w|=|&]+(^abcdef))					


Es soll z.B. "benutzer=hans" aufführen, aber "benutzer=abcdef" nicht finden, dabei darf aber [\w|=|&] nicht verändert werden.
Ist das überhaupt möglich in einem Schritt zu machen?
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 07.01.10 22:46 
"^" gibt es nur bei Character Classes, was du suchst, nennt sich lookahead.

_________________
>λ=
BlackMatrix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243
Erhaltene Danke: 1



BeitragVerfasst: Sa 09.01.10 01:53 
Gibt es eine allgemeine Methode um strings zu URL Encoden?

Also aus einem "?" ein "\?" machen, aus einem "." ein "\."?
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 09.01.10 15:19 
Ich will erst gar nicht wissen, wie du auf "URL" kommst :P .

Regex.Escape

_________________
>λ=
BlackMatrix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243
Erhaltene Danke: 1



BeitragVerfasst: Sa 09.01.10 16:04 
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
Ich will erst gar nicht wissen, wie du auf "URL" kommst :P .

Regex.Escape


;)

Vielen Dank :-P

Wo liegt denn hier der Fehler? Kann ich keine Veroderung von Regex machen? Ich könnte zwar nacheinander prüfen, aber kann man auch "gleichzeitig" prüfen?

ausblenden C#-Quelltext
1:
2:
3:
4:
string treffer = 
(Regex.Match(text, patter1.Value) 
||
(Regex.Match(text, patter2).Value);


Und kann gibt es für strings die Methode

"&" in "&"
"<" in "&lt;"
">" in "&gt;"

zu konvertieren?

Ich hoffe ich nerve nicht^^

MfG BlackMatrix
Moderiert von user profile iconChristian S.: Quote- durch C#-Tags ersetzt
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 09.01.10 16:59 
user profile iconBlackMatrix hat folgendes geschrieben Zum zitierten Posting springen:
Kann ich keine Veroderung von Regex machen?
Nein, aber warum das "oder" nicht gleich in den Regex einbauen?

user profile iconBlackMatrix hat folgendes geschrieben Zum zitierten Posting springen:
Und kann gibt es für strings die Methode

"&" in "&amp;"
"<" in "&lt;"
">" in "&gt;"

zu konvertieren?
Da das nicht mehr zum Thema gehört, sag ich mal nur so viel: Suche bei Google C# HTML ENCODE :zwinker: .

_________________
>λ=
BlackMatrix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243
Erhaltene Danke: 1



BeitragVerfasst: Sa 09.01.10 17:25 
Ich wusste nicht wie es im Patter geht, deswegen hatte ich gehofft, dass man das vielleicht auch so machen kann, aber nun habe ich es hinbekommen und danke für den HTMLEncoding Tipp.

Mein C# Wissen vergrößert sich :-P
BlackMatrix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243
Erhaltene Danke: 1



BeitragVerfasst: Sa 09.01.10 18:27 
Eine Frage hätte ich dann noch ;)

Eine MatchCollection ist ja schreibgeschützt, also könnte ich z.B. folgendes nicht tun?

ausblenden C#-Quelltext
1:
MatchCollection benutzer = Regex.Matches(text, patter).Replace("&","&");					


Das müsste ich dann erst im nachfolgenden oder vorherigen Schritt tun, richtig?
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 09.01.10 18:49 
user profile iconBlackMatrix hat folgendes geschrieben Zum zitierten Posting springen:
Eine MatchCollection ist ja schreibgeschützt
Hat wenig damit zu tun, dass MatchCollection einfach keine Replace-Methode kennt... also ja, das wirst du erst beim Auslesen der einzelnen Strings machen können.

_________________
>λ=
BlackMatrix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243
Erhaltene Danke: 1



BeitragVerfasst: So 10.01.10 00:15 
Gibt es die Möglichkeit Duplikate nicht mit in die MatchCollection aufzunehmen? Sozusagen, jeden Treffer nur einmal?
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 10.01.10 00:18 
Da musst du erstmal "Duplikat" definieren, zwei Treffer an der gleichen Stelle wird's wohl nicht geben ;) .
Also: Nein, das wirst du beim Auslesen wieder selbst machen, am besten über ein Set<T> (wenn man nicht gleich mit LINQ kommen will).

_________________
>λ=
BlackMatrix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243
Erhaltene Danke: 1



BeitragVerfasst: So 10.01.10 00:21 
Wow antwortest du schnell :)

Mit Duplikat meinte ich, dass die MatchCollection nicht 2x den gleichen Treffer übernimmt.

"benutzer=12345" sollte nicht 2x in der MatchCollection stehen.

LINQ würde ich erstmal nach hinten schieben ^^ Kannst du Set<T> genauer definieren?
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 10.01.10 00:26 
Sorry, das sollte eigentlich HashSet<T> heißen ;) (3.5+).

_________________
>λ=
BlackMatrix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243
Erhaltene Danke: 1



BeitragVerfasst: So 10.01.10 01:02 
Hat bisschen gedauert, aber klappt wunderbar =)

Äh, eine Frage hätte ich aber dennoch, wie greife ich auf das Hashset zu?
ausblenden C#-Quelltext
1:
2:
3:
            HashSet<string> hashset = new HashSet<string>();
            for (int i = 0; i < mc.Count; i++)
                    hashset.Add(mc[i].Value);


hashset[1] funktioniert nicht so ganz^^

edit: :( Hätte ich einen neuen Thread aufmachen sollen?

Okay habs, ganz schön viel Code, nur um so doppelte Einträge aus der MatchCollection rauszuholen.

Ich nehme mal an, dass man es so zu machen hat. Falls es mit weniger Code oder einfacherer geht, kann mir gerne bescheid gegeben werden :)
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
            HashSet<string> hashset = new HashSet<string>();
            for (int i = 0; i < mc.Count; i++)
                    hashset.Add(mc[i].Value);
            string[] benutzer = new string[hashset.Count];
            hashset.CopyTo(benutzer);
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 10.01.10 01:45 
Da HashSet IEnumerable<T> implementiert, bietet sich eine foreach-Schleife an :) . Ansonsten könnte man deinen Code auch durch .ToArray() ersetzen, auch wenn das genau genommen schon unter LINQ fällt :zwinker: .

_________________
>λ=
BlackMatrix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243
Erhaltene Danke: 1



BeitragVerfasst: So 10.01.10 02:26 
Also ich hab mal Linq eingebunden, aber ehrlich gesagt, bin ich jetzt ein wenig überfragt, der Code von oben hat zwar funktioniert, aber ich wollte es mal noch probieren wie du es mir jetzt vorgeschlagen hast.

Ich dachte irgendwie so, aber das sind bestimmt immer noch viel zu viele Zeilen(außerdem funktioniert es nicht, ich kann irgendwie mit dem Rückgabewert (Erweiterungen) von .toarray nichts anfangen :-/

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
            HashSet<string> hashset = new HashSet<string>();
            foreach (string element in mc)
                    hashset.Add(element);
            string[] benutzer = new string[hashset.Count];
            benutzer = hashset.ToArray<string>;


letzte Zeile passt nicht.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 10.01.10 02:32 
user profile iconBlackMatrix hat folgendes geschrieben Zum zitierten Posting springen:
außerdem funktioniert es nicht, ich kann irgendwie mit dem Rückgabewert (Erweiterungen) von .toarray nichts anfangen :-/
Ist ein ganz normales Array ;) ?

ausblenden C#-Quelltext
1:
string[] benutzer = hashSet.ToArray();					

_________________
>λ=
BlackMatrix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243
Erhaltene Danke: 1



BeitragVerfasst: So 10.01.10 02:35 
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconBlackMatrix hat folgendes geschrieben Zum zitierten Posting springen:
außerdem funktioniert es nicht, ich kann irgendwie mit dem Rückgabewert (Erweiterungen) von .toarray nichts anfangen :-/
Ist ein ganz normales Array ;) ?

ausblenden C#-Quelltext
1:
string[] benutzer = hashSet.ToArray();					


So einfach hatte ich das nicht probiert^^
BlackMatrix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243
Erhaltene Danke: 1



BeitragVerfasst: So 10.01.10 14:28 
Um wieder aufs Thema zurückzukommen, kann ich einen String auch nach einer Variable prüfen lassen?

ausblenden C#-Quelltext
1:
2:
3:
string variable = "test";

MatchCollection mc = Regex.Matches(text, //und hier möchte ich nun, dass mein Patter neben [:|&|\w]+ auch auf die variable prüft und darf aufgenommen werden, wenn sie 0x oder 1x vorkommt);


Wenn das möglich wäre, wäre das genial :)

Ich hatte an so etwas gedacht, was natürlich nicht funktioniert^^

ausblenden C#-Quelltext
1:
string patter = @"(?<=['|""])" + (url)? + restpatter";					
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 10.01.10 15:02 
user profile iconBlackMatrix hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden C#-Quelltext
1:
string patter = @"(?<=['|""])" + (url)? + restpatter";					
Du musst schon trennen, was hier C#-Bezeichner/Operatoren sind und was zum Regex gehört.
ausblenden C#-Quelltext
1:
string pattern = @"(?<=['|""])(" + url + ")?" + restpattern; // + ggf. Regex.Escape					

Wobei sich hier string.Format anbietet.

PS: "Pattern" ist kein Plural und "Patter" davon sicher nicht die Einzahl... so einen hatten wir doch schon einmal *g* .

_________________
>λ=