Entwickler-Ecke

Basistechnologien - mit Regex realisierbar?


BlackMatrix - Mo 21.02.11 16:29
Titel: mit Regex realisierbar?
Hi.

Ich möchte gerne mit Hilfe von Regex folgendes Problem lösen:

Ich habe verschiedene strings, die aus IDs,wilden Zeichen und evtl. mit "Kontostand: x" versehen sind.

z.B:


C#-Quelltext
1:
2:
3:
"id=1/\/Kontostand: 9€"
"id=12/\/Kontostand: -7€"
"id=123/\//\/"


Und nun will ich, dass sobald Kontostand im string vorkommt, er nur die nimmt, die nach dem
Zitat:
:
eine positive Zahl haben, ansonsten sollte er alle IDs nehmen.

Bisher habe ich immer mit if/else nach "Kontostand" abgefragt und dann unterschiedliche Regex verwendet.

bisher habe ich:


C#-Quelltext
1:
string pattern = "id=\d+((?!id=).)*Kontostand: \d"                    



Ich hoffe mir kann jemand helfen.

MfG BlackMatrix


Kha - Mo 21.02.11 17:02

Was ist denn so schlimm an if (!s.Contains("Kontostand: -")) :nixweiss: ? Auf deinen Regex kann ich nicht näher eingehen, weil mir der Teil ((?!id=).) nicht klar ist. In deinen Beispielen kommt id jeweils nur einmal vor?


bakachan - Mo 21.02.11 17:18

Was spricht denn gegen eine optionale Kontostand-Gruppe?

Quelltext
1:
id=(?<id>[0-9]+)(\/\\/)+(Kontostand: (?<Kontostand>-?\d+)€)?                    

(wenn negative Zahlen nicht mit drin stehen sollen einfach das -? entfernen)


BlackMatrix - Di 22.02.11 09:09

user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
Was ist denn so schlimm an if (!s.Contains("Kontostand: -")) :nixweiss: ?


Er soll ja, sobald das Wörtchen "Kontostand" vorhanden ist, schauen, ob danach ein negativer Wert steht und diese ID nicht in die MatchCollection aufnehmen. Jede andere ID darf er aufnehmen, auch die, wo kein Kontostand steht. Wenn ich nun mit if/else trenne, dann muss ich 2 verschiedene pattern definieren, schöner wäre es natürlich, nur einen (etwas komplizierteren) zu haben. Ist das nicht möglich?

user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
Auf deinen Regex kann ich nicht näher eingehen, weil mir der Teil ((?!id=).) nicht klar ist. In deinen Beispielen kommt id jeweils nur einmal vor?


Ich habe die strings etwas abgekürzt, unter den "wilden Zeichen" kann es auch vorkommen, dass zufälligerweise id drin steht und um da auf Nummer sicher zu gehen, habe ich das so entwickelt.