Regex


#1

Guten Tag zusammen

Ich stehe vor einem wahrscheinlich kleinen Problem. Ich will in C# einen String vergleichen mit Regex. Leider kann ich folgende Eingaben nicht im GUI machen: \d{3} weil das \d als Escape Sequenz erkannt wird. Gibt es einen Weg das zu umgehen?

Wenn ich im Code das d{ ersetzen will mit eine \d{ kommt der selbe Fehler.

Vielen Dank schon mal für euere Hilfe


#2

Wenn es so ähnlich wie in Java ist, könnte \\d{3} funktionieren. Damit quotest du das Backspace selbst, so dass es als eigenes Zeichen zum Regex “durchgereicht” wird.


#3

@Landei hat hier die richtige Vermutung, folgender Code kompiliert und läuft bei mir:

using System;
using System.Text;
using System.Text.RegularExpressions;

namespace RegexTest
{
    public class StringValidator
    {
        public bool Match(string input)
        {
            string pattern = "\\d{3}";
            Regex r = new Regex(pattern);
            return r.Match(input).Success;
        }
    }
}

#4

Ich hab mal im C#-Code eines Kollegen einen Klammeraffen vor Strings in Anführungszeichen gesehen, das verhindert die Interpretation der Backslashes als Escapezeichen in der IDE. Damit könntest du dann folgendes schreiben:

@"\d{3}"

Seitdem hätte ich das auch gern in Java. Allein schon diese doppelten Backslashes in Pfaden wären nicht mehr nötig, von regulären Ausdrücken ganz zu schweigen.


#5

Das wäre ein nettes Feature.

Du kannst die aber auch einfach anders herum schreiben, zumindest habe ich in Java noch keinen Unterschied bemerkt ob man \ oder / in Pfadnamen verwendet.


#6

wie @TMII schon sagte, kannst du für Pfade einfach “/” nehmen.
Und für Regex mach ich die auch extra woanders (meistens online, da ich erst den Regex entwickel und dann den Rest drumherum) und kopiere mir es dann in die “”. NetBeans macht dann automatisch \ -> \\

Edit: Interessanterweise macht das Forum aus “\” direkt “”. Musste also “\\\” machen im Eingabefeld


#7

Danke ihr beiden, aber das ist mir beides durchaus bewusst. Das automatische Umwandeln beim Einfügen in doppelte Anführungszeichen hab ich in Eclipse wieder ausgestellt, nachdem es bei meiner Arbeitsweise öfter hinderlich war als nützlich.

Das Verwenden eines Slashes statt zweier Backslashes geht dummerweise nicht bei UNC-Pfaden der Art \\Freigabe\Verzeichnis . Die muss man dann so schreiben: \\\\Freigabe\\Verzeichnis (oder \\\\Freigabe/Verzeichnis).

Reguläre Ausdrücke habe ich meistens in externen Regeldateien, aber für manch kurzes wäre so eine Unterscheidung echt praktisch. In Perl gibt es die auch, einfache Anführungszeichen werden nicht interpretiert, (entspricht also der @"..." Variante in C#), doppelte Anführungszeichen werden interpretiert.


#8

Vielen Dank für eure Beiträge. Mit zwei \ hat es wunderbar funktioniert.