| Autor |
Beitrag |
BlackMatrix
      
Beiträge: 243
Erhaltene Danke: 1
|
Verfasst: 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
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
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Do 07.01.10 22:46
"^" gibt es nur bei Character Classes, was du suchst, nennt sich lookahead.
_________________ >λ=
|
|
BlackMatrix 
      
Beiträge: 243
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Sa 09.01.10 15:19
Ich will erst gar nicht wissen, wie du auf "URL" kommst  .
Regex.Escape
_________________ >λ=
|
|
BlackMatrix 
      
Beiträge: 243
Erhaltene Danke: 1
|
Verfasst: Sa 09.01.10 16:04
Kha hat folgendes geschrieben : | Ich will erst gar nicht wissen, wie du auf "URL" kommst .
Regex.Escape |
Vielen Dank
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
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Sa 09.01.10 16:59
|
|
BlackMatrix 
      
Beiträge: 243
Erhaltene Danke: 1
|
Verfasst: 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 
|
|
BlackMatrix 
      
Beiträge: 243
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: 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 
      
Beiträge: 243
Erhaltene Danke: 1
|
Verfasst: So 10.01.10 00:15
Gibt es die Möglichkeit Duplikate nicht mit in die MatchCollection aufzunehmen? Sozusagen, jeden Treffer nur einmal?
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: 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 
      
Beiträge: 243
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: So 10.01.10 00:26
Sorry, das sollte eigentlich HashSet<T> heißen  (3.5+).
_________________ >λ=
|
|
BlackMatrix 
      
Beiträge: 243
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: 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  .
_________________ >λ=
|
|
BlackMatrix 
      
Beiträge: 243
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: So 10.01.10 02:32
|
|
BlackMatrix 
      
Beiträge: 243
Erhaltene Danke: 1
|
Verfasst: So 10.01.10 02:35
|
|
BlackMatrix 
      
Beiträge: 243
Erhaltene Danke: 1
|
Verfasst: So 10.01.10 14:28
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: 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* .
_________________ >λ=
|
|