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



BeitragVerfasst: Mo 21.02.11 16:29 
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:

ausblenden 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:

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



Ich hoffe mir kann jemand helfen.

MfG BlackMatrix
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: Mo 21.02.11 17:18 
Was spricht denn gegen eine optionale Kontostand-Gruppe?
ausblenden Quelltext
1:
id=(?<id>[0-9]+)(\/\\/)+(Kontostand: (?<Kontostand>-?\d+)€)?					

(wenn negative Zahlen nicht mit drin stehen sollen einfach das -? entfernen)
BlackMatrix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243
Erhaltene Danke: 1



BeitragVerfasst: 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.