String durchsuchen und mit unterschiedlichen Zahlen ersetzen

Mavericklp

Erfahrenes Mitglied
Moin zusammen,
ich möchte gerne eine Textbox durchsuchen und den text mit einer zufallszahl ersetzen. Allerdings soll diese Zahl jedes mal eine andere sein.

Beispiel:
Input: {num}{num}Text
Output: 53Text

Mit der Jahres Zahl bekomme ich es hin. Auch das eine zufalls Zahl eingefügt wird. aber die zufallszahl ist jedes mal gleich. Da diese scheinbar nur einmal generiert wird.

Bei Regex, habe ich gelesen, das es da noch einen Count Parameter gibt, setze ich den, bekomme ich 10 Zeilen Weiter 2 Fehlermeldungen, das Typ und ein Bezeichner in einer Foreach Anweisung enthalten sein muss und der Name "collection" ist im aktuellen Kontext nicht vorhanden. Nehme ich die Option count raus läuft der code aber jedes {num} mird gleich ersetzt.

Hier mein Code:
foreach (Match match in Regex.Matches(prefix, "{num}", RegexOptions.IgnoreCase))
{
prefix = Regex.Replace(prefix, "{num}", rand.Next(0, 9).ToString(), count: 1, options: RegexOptions.IgnoreCase);
}

prefix = Regex.Replace(prefix, "{jahr}", DateTime.Now.Year.ToString(), options:RegexOptions.IgnoreCase);
prefix = Regex.Replace(prefix, "{mon}", DateTime.Now.Month.ToString(), options:RegexOptions.IgnoreCase);
 

Anhänge

  • 2023-04-11 14_43_55-IT-Tool - Microsoft Visual Studio.png
    2023-04-11 14_43_55-IT-Tool - Microsoft Visual Studio.png
    62 KB · Aufrufe: 2
.NET - welches .NET? VB.NET?
Und das Problem selber hat glaub nix mit regex zu tun sondern einfach mit rand innerhalb einer foreach Schleife.

Achja, die Schleife würde ich anders aufbauen. Ich bin sicher, dass RegEx in der Sprache auch test() kennt.
Code:
//theoretiwsches Konstrukt, da ich die Syntax zu unbekannt.NET nicht kenne
while(RegEx.test(prefix, "{num}", RegexOptions.IgnoreCase)){
    //TODO RegEx.replace count=1
}
 
Zuletzt bearbeitet:
@Yaslaw
unter C# müsste es IsMatch sein (falls ich deine test Methode richtig interpretier)

@Mavericklp
so ganz versteh ich das problem noch nicht, sollen alle zahlen im text immer durch neue ersetzt werden, oder exakt immer diese schreibweiße "{num}{num}" mit 2 neuen Zahlen?
 
Hi,
sry für die offenen Fragen. Es ist in C# Programmiert.
Es geht sich um einen Passwort Generator, der uns einiges an Zeit abnehmen soll. In der TextBox Präfix bzw. Suffix soll auch die Auswertung von Variablen funktionieren {jahr}, {monat}, {firma}. Statische Variablen funktionieren. Aber bei der Variable {num} erscheint für jeden durchlauf das selbe.

Als Beispiel: (je 1 durchlauf)
Passwort{num} -> Passwort 3
Passwort{num}{num} -> Passwort 55
Passwort{num}{num}{num} -> Passwort 888

Die Ausgabe soll aber so aussehen:
Passwort{num} -> Passwort 7
Passwort{num}{num} -> Passwort 19
Passwort{num}{num}{num} -> Passwort 625

Alternativ fällt mir gerade auch ein, das ich nicht mit {num} arbeite sondern mit {num2} gleichzeitig noch die anzahl der stellen mitgebe.
 
Schau dir mal Regex.Replace mit dem MatchEvulator an.
Regex.Replace Methode (System.Text.RegularExpressions)
Für den Replace wird eine Methode mit reingereicht und in dieser kannst du deinen Match prüfen und entsprechend den zu ersetzenden String zurück geben

Hier mal ein Beispiel von mir
(ungetestet und aus einem anderen Projekt von mir mal vereinfacht, nur zum zeigen wie die Methode ungefähr funktioniert):
C#:
        public string Parse() => regex.Replace(inputString, ReplaceMatch);

        private string ReplaceMatch(Match match)
        {
            if (match.Success && match.Groups[groupMatch].Success)
            {
                if (int.TryParse(match.Groups[groupMatch].Value, out var nr))
                    return $"{nr} found";

                return "!Unbekannte Deklaration!";
            }

            return match.Value;
        }
(in meinem Beispiel hab ich im Regex die Stelle benannt Regular Expression Language - Quick Reference deshalb prüf ich explizit auf Groups)
 
Zuletzt bearbeitet:
Zurück