Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   C# Strip? (https://www.delphipraxis.net/75981-strip.html)

Pseudemys Nelsoni 28. Aug 2006 10:16


Strip?
 
Tja, leider nicht das an was ihr gedacht habt :mrgreen: ...

Folgendes: Ich möchte aaus einem String bestimmte Zeichen löschen. Mal als Beispiel:

Zitat:

Blah$03,01blubb
Also ich möchte immer dieses vorkommen entfernen: $<[n]n>[,<[n]n>

D.h all sollche Sachen wie:
$1
$15
$1,1
$15,15

möchte ich aus meinem String raushaben. Habt ihr da ne Idee? Gibt es dafür nen Regex?

inherited 28. Aug 2006 10:25

Re: Strip?
 
Wenn hinter der Zahl zwangsläufig eine nicht-Zahl folgt, kannst du ja einfach soweit löschen.

Khabarakh 28. Aug 2006 10:36

Re: Strip?
 
Zitat:

Zitat von Pseudemys Nelsoni
Gibt es dafür nen Regex?

Natürlich :mrgreen: .
Code:
\$\d+(,\d+)?
@inherited: Und wenn ein weiteres Komma vorkommt, der String auch am Ende liegen kann uswusf. ? Da vertrau ich lieber auf die Unkompliziertheit meiner Regechsen ;) .

Pseudemys Nelsoni 28. Aug 2006 10:43

Re: Strip?
 
@Inherited, so wollte ich es ja nicht *g*. da hab ich dann nachher 20 ifs usw

Khabarakh, danke für Deinen Code :). Kannst Du ihn mir evtl noch verbessern? Hab ka von den Regexen *g.

Es geht nicht um das Zeichen "$", sondern ein Steuerzeichen (Char 3).

ALso entfernt werden muss:

Das Zeichen, dass dem Char "2" entspricht.
Das zeichen, dass dem Char "31" entspricht.
Das Zeichen, dass dem Char "3" entspricht. Dieser hat wie oben gezeigt evtl Parameter, d.h []nn,nn im längsten fall ([] soll hier das Steuerzeichen 3 darstellen).

Es geht darum über IRC empfangene Messages von Fett/Unterstrich/Farbe zu befreien.

Khabarakh 28. Aug 2006 10:57

Re: Strip?
 
Auch in Regular Expressions gibt es glücklicherweise ASCII-Escape-Sequenzen:
Zitat:

Zitat von SDK - Escape Sequences
\x20
Matches an ASCII character using hexadecimal representation (exactly two digits).

Code:
\x03\d+(,\d+)?

Pseudemys Nelsoni 28. Aug 2006 11:01

Re: Strip?
 
Ah, much thx :).

Wie komme ich danach an das Ergebnis? Ich habe bis jetzt nur per "IsMatch()" geprüft ob ein string einer Maske entspricht..aber noch nie ein Resultat ausgeben lassen. Mit Matches() evtl?
Wie sagt ich in einem Regex, dass ich durchgehend ein Zeichen entfern haben möchte? also die [] beziehen sich ja immer nur auf ein Zeichen, nicht auf dne ganzen String oder?

Khabarakh 28. Aug 2006 11:10

Re: Strip?
 
Zitat:

Zitat von Pseudemys Nelsoni
Ah, much thx :).

Wie komme ich danach an das Ergebnis? Ich habe bis jetzt nur per "IsMatch()" geprüft ob ein string einer Maske entspricht..aber noch nie ein Resultat ausgeben lassen. Mit Matches() evtl?

Match() liefert dir das erste Ergebnis, Matches() alle.
Zitat:

Wie sagt ich in einem Regex, dass ich durchgehend ein Zeichen entfern haben möchte?
Erst einmal kannst du mit einem Regex nur suchen ;) . Für alles andere braucht es Hilfsfunktionen wie Regex.Replace(). Bei einem einzigen Zeichen wäre aber genausogut String.Replace() möglich.
Zitat:

also die [] beziehen sich ja immer nur auf ein Zeichen, nicht auf dne ganzen String oder?
Hm? Bitte nochmal formulieren :stupid: .

Pseudemys Nelsoni 28. Aug 2006 11:25

Re: Strip?
 
Ich habe es nun so:

Code:
internal string Strip(string str)
{
    Regex regex = new Regex(@"\x03\d+(,\d+)?");

    return regex.Match(str).Value;
}
Code:
string test = (char)3 + "15,15blubb";
Console.WriteLine(irc.Strip(test));
Console.ReadLine();
Nun bekomme ich aber genau das wieder, was ich eigentlich gelöscht haben wollte :mrgreen: Also [3]15,15 und das "blubb" ist weg (das was ich ja eigentlich haben möchte*g).

Zitat:

Hm? Bitte nochmal formulieren
Ich meinte, das sich in nem Regex die [] "teile"(*g*) nur auf ein Zeichen bezieht und nicht auf den kompletten String. :angel:

Khabarakh 28. Aug 2006 11:37

Re: Strip?
 
Ich hab doch gesagt, dass Regexes nur zum Suchen da sind ;) . Aber Gefundenes lässt sich natürlich auch entfernen, z.B. eben durch genanntes Regex.Replace().

Zitat:

Ich meinte, das sich in nem Regex die [] "teile"(*g*) nur auf ein Zeichen bezieht und nicht auf den kompletten String. :angel:
Bitte welche Teile :stupid: ? Character Sets (die durch eckige Klammern gekennzeichnet werden) habe ich im ganzen Thread noch nicht benutzt. Du hast [] als Platzhalter für Sonderzeichen eingeführt und nunja... ein Char wird sich wohl immer auf einen Char und nicht auf einen String beziehen :gruebel: :spin2: .


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz