Anzahl von Ziffern in einer Klammer festlegen

CopWorker

Erfahrenes Mitglied
Hallo,
hier noch was ich nicht versehe.

Ich Suche in einem Text nach 3 Elementen.
Der Text setzt sich aus einem Schlüssel, einem Wert und einem Zahlenwert innerhalb einer Klammer zusammen.
Bsp.: VarType = "String (30)"
C#:
string strText = "VarType = \"String ( 30 )\"";
Jetzt habe ich bereits einen RegEx Ausdruck gebildet.
C#:
Match mTemp = Match.Empty;

mTemp = Regex.Match(strText, @"(?'Key'\w+)\s*[=]\s*(?<delimiter>[""'])(?'Value'\w+)\s*\(\s*(?'Zahl'[\d]{1,3})\s*\)(?<delimiter>)");

if (mTemp.Success && mTemp.Groups["Key"].Success && mTemp.Success && mTemp.Groups["Value"].Success)
{
    //Variablentyp aus Typenliste ermitteln
    strKey = mTemp.Groups["Key"].Value;
    strValue = mTemp.Groups["Value"].Value;
    strNumber = mTemp.Groups["Zahl"].Value;
}
Das funktioniert auch bestens. Ich erhalte alle Werte zurück die ich brauche.
Nur eines geht nicht.
Innerhalb der Klammer kann ich die Anzahl der Ziffern nicht auf 0 zulassen. VarType = "String ()" oder VarType = "String ( )"
Dafür ist doch die Eingabe in der geschweiften Klammer zuständig:
C#:
(?'Zahl'[\d]{1,3})\s*\)
Folgendes geht nicht:
C#:
(?'Zahl'[\d]{0,3})\s*\)

Geht das überhaupt mit diesem Aufbau des RegEx Ausdrucks?

Vielen Dank im Voraus.
Gruß CopWorker
 
Ich verstehe nicht, was du willst. Das mit den {0,3} stimmt so schon, dann gibt er dir auch leer zurück.
 
Hallo Zvoni, hallo Yaslaw,

sorry, mein Fehler.
Hatte in Visual Studio die Bedingung des Breakpoints unkorrekt definiert.
Darum hat der Debugger nicht angehalten.

Aber jetzt ist alles so wie es sein soll.

Vielen dann nochmal für eure Hilfe.

Gruß CopWorker
 
Hi CopWorker,
mir ist noch was in deinem Quellcode aufgefallen

C#:
if (mTemp.Success && mTemp.Groups["Key"].Success && mTemp.Success && mTemp.Groups["Value"].Success)
in der IF Bedingung prüfst du 2 mal auf mTemp.Success,
ich vermute mal das 2te sollte ev eher auf mTemp.Groups["Zahl"].Succes prüfen

C#:
mTemp = Regex.Match(strText, @"(?'Key'\w+)\s*[=]\s*(?<delimiter>[""'])(?'Value'\w+)\s*\(\s*(?'Zahl'[\d]{1,3})\s*\)(?<delimiter>)");
am ende der (?<delimiter>)
ich vermute mal das du eher (\k<delimiter>) setzen wolltest, sprich wenn der Tag mit " beginnt solls auch mit " enden, würde eher aktuell so nicht prüfen
denke so müsste es sein
C#:
mTemp = Regex.Match(strText, @"(?'Key'\w+)\s*[=]\s*(?<delimiter>[""'])(?'Value'\w+)\s*\(\s*(?'Zahl'[\d]{1,3})\s*\)(\k<delimiter>)");

siehe hierzu
Regular Expression Language - Quick Reference
 

Neue Beiträge

Zurück