Erkennen von 2 Bereichen in einem String

CopWorker

Erfahrenes Mitglied
Hallo zusammen,

bin gerade dabei einen String zu zerlegen.
Und zwar:
C#:
string entry = "UDTKCVSP ( 31 )";
mTemp = Regex.Match(entry, @"(?=(\()(?'MeineZahl'[\d]{1,3})(?=\)))");
if (mTemp.Success && mTemp.Groups["MeineZahl"].Success)
    zahl = mTemp.Groups["MeineZahl"].Value;

Mein Problem ist, dass die Leerzeichen innerhalb der Klammer stören.
Diese Leerzeichen können aber vorhanden sein, da habe ich keinen Einfluss drauf.
Wenn nur die Zahl allein in der Klammer steht funktioniert das.

Wie kann ich die Leerzeichen innerhalb der Klammer ignorieren.
Im RexEx Ausdruck versteht sich.

Besteht die Möglichkeit, auch den Text vor der Klammer noch auszulesen?

Vielen Dank.

Grüße von CopWorker
 

Zvoni

Erfahrenes Mitglied
Schmeiss doch die Leerzeichen vorher raus. Wenn keine drin sind, passiert nix, ansonsten wirds ersetzt.
in VB6 ist das ein simples
MyString=Replace(Replace(MyString, "( ", "("), " )", ")")
Und jetzt wirfst du es dem RegEx an den Kopf

Generell: Immer wenn ich sowas sehe, erinner ich mich gerne an die StrSpn/StrCSpn-API zurück.
Sind ein paar Zeilen code damit (inkl. Das zurückgeben des Textes vor der Klammer)
 

CopWorker

Erfahrenes Mitglied
Hallo Zvoni,
eigentlich hast du recht.
In C# stellt da auch kein Problem dar.
Vor der Klammer können sind auch Leerzeichen im Text zulässig, z.Bsp.: "Grüne Bohnen (234)
In der Klammer könne auch mehrere Leezeichen vorkommen, z.Bsp.: "Spargel ( 32)

Die Elegante Lösung ist RegEx. Da muss bloss der Ausdruck der richtige sein.
Dann kann ich mit einem Einzeiler alles selektieren.

Trotzdem vielen Dank
Gruß CopWorker
 

CopWorker

Erfahrenes Mitglied
Hallo,
noch was.
Ist es auch möglich den Text vor den Klammern zu selektieren.
In einem RegEx Ausdruck?

So in etwa.
(?=(?'MeinText'[\w]?s*\()\s*(?'MeineZahl'[\d]{1,3})\s*(?=\)))

Wobei ich wieder mit den erlaubten Leerzeichen kämpfe.
Funktioniert nur bei: UDTKCVSP( 31 )
Funktioniert nicht bei: UDTKCVSP ( 31 )

Ein kleiner Tipp vielleicht.

Grüße CopWorker
 

Zvoni

Erfahrenes Mitglied
(?'MeinText'[\w]*)\s*(\()\s*(?'MeineZahl'[\d]{1,3})\s*(?=\))

EDIT: Und lass den Lookahead weg. Der hat mir auf der RegEx-Testseite das Ergebnis immer vermurkst
 

Neue Beiträge