Entwickler-Ecke
Basistechnologien - Kann mir jemand bei RegEx aushelfen?
BlackMatrix - Do 07.01.10 22:27
Titel: Kann mir jemand bei RegEx aushelfen?
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
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?
BlackMatrix - 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 - Sa 09.01.10 15:19
Ich will erst gar nicht wissen, wie du auf "URL" kommst :P .
Regex.Escape
BlackMatrix - Sa 09.01.10 16:04
Kha hat folgendes geschrieben : |
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?
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 "<"
">" in ">"
zu konvertieren?
Ich hoffe ich nerve nicht^^
MfG BlackMatrix
Moderiert von
Christian S.: Quote- durch C#-Tags ersetzt
Kha - Sa 09.01.10 16:59
BlackMatrix hat folgendes geschrieben : |
| Kann ich keine Veroderung von Regex machen? |
Nein, aber warum das "oder" nicht gleich in den Regex einbauen?
BlackMatrix hat folgendes geschrieben : |
Und kann gibt es für strings die Methode
"&" in "&"
"<" in "<"
">" in ">"
zu konvertieren? |
Da das nicht mehr zum Thema gehört, sag ich mal nur so viel:
C# HTML ENCODE :zwinker: .
BlackMatrix - 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 - 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?
C#-Quelltext
1:
| MatchCollection benutzer = Regex.Matches(text, patter).Replace("&","&"); |
Das müsste ich dann erst im nachfolgenden oder vorherigen Schritt tun, richtig?
Kha - Sa 09.01.10 18:49
BlackMatrix hat folgendes geschrieben : |
| 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 - So 10.01.10 00:15
Gibt es die Möglichkeit Duplikate nicht mit in die MatchCollection aufzunehmen? Sozusagen, jeden Treffer nur einmal?
Kha - 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 - 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 - So 10.01.10 00:26
Sorry, das sollte eigentlich HashSet<T> heißen ;) (3.5+).
BlackMatrix - 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?
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 :)
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 - 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 - 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 :-/
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 - So 10.01.10 02:32
BlackMatrix hat folgendes geschrieben : |
| außerdem funktioniert es nicht, ich kann irgendwie mit dem Rückgabewert (Erweiterungen) von .toarray nichts anfangen :-/ |
Ist ein ganz normales Array ;) ?
C#-Quelltext
1:
| string[] benutzer = hashSet.ToArray(); |
BlackMatrix - So 10.01.10 02:35
So einfach hatte ich das nicht probiert^^
BlackMatrix - So 10.01.10 14:28
Um wieder aufs Thema zurückzukommen, kann ich einen String auch nach einer Variable prüfen lassen?
C#-Quelltext
1: 2: 3:
| string variable = "test";
MatchCollection mc = Regex.Matches(text, |
Wenn das möglich wäre, wäre das genial :)
Ich hatte an so etwas gedacht, was natürlich nicht funktioniert^^
C#-Quelltext
1:
| string patter = @"(?<=['|""])" + (url)? + restpatter"; |
Kha - So 10.01.10 15:02
BlackMatrix hat folgendes geschrieben : |
C#-Quelltext 1:
| string patter = @"(?<=['|""])" + (url)? + restpatter"; | |
Du musst schon trennen, was hier C#-Bezeichner/Operatoren sind und was zum Regex gehört.
C#-Quelltext
1:
| string pattern = @"(?<=['|""])(" + url + ")?" + restpattern; |
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* .
BlackMatrix - So 10.01.10 15:06
Stimmt, jetzt wo du das schreibst, macht das Sinn ;)
Das die Syntax falsch war, war mir bewusst, aber ich dachte ich schreibe es mal so wie in etwa es aussehen sollte, dadurch war vielleicht der Sinn besser zu erkennen.
edit: und wieder 4 Zeilen Code erspart, ich hatte es nämlich mit Hashset nachbearbeitet. Danke dir =)
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!