Hi zusammen,
ich habe folgendes Problem. Ich muss strings vergleichen aber mit Wildcards.
? einzelnes Zeichen
* mehere einzelne Zeichen
zu ?: Das kann in . konvertiert werden
zu : Das kann in . konvertiert werden
Am Anfang des Pattern noch ein "^" und am ende ein "$" hibzufügen.
Soweit so klar. Aber wie konvertiere ich nun wenn man nach "Bla_12-14" oder "1-200" sucht? Da streikt mein Kopf leider...
Again what learned...
Ich habe zwar eine Lösung aber irgendwie gefällt die mir nicht. Ich lese den ausdruck 12-132 aus und parse minumum und maximum. Dann mach ich darauf den Regex [0-9]{minumum ,maximum}. Damm schau ich mich isMatch ob es Matched und im Falles es ist so ein Ausdruck enthalten, prüfe ich noch ob der Value innerhalb min und max ist.
Wenn einem was besseres einfällt immer her damit.
Again what learned...
Lustig. Hatte gerade genau das selbe Thema. (EDIT: Bis auf das mit den Nummernbändern
Meine Lösung:
/// <summary>
/// Returns a regex for the specified format expression.
/// </summary>
/// <param name="format">
/// The format expression.
/// Format expression syntax:
/// * = Any number of chars (.*?)
/// ? = Any single character (.)
/// # = A single digit (\d)
/// % = A single character (\w)
/// Other input characters will be escaped using Regex.Escape(...).
/// </param>
/// <param name="formatDescriptor">The format descriptor for the format expression (e.g. "dd-mm-YYYY").</param>
/// <returns></returns>
public static Regex ToRegex(string format) {
format = format.Replace("%", "%CHARACTER%").Replace("*", "%STAR%")
.Replace("#", "%DIGIT%").Replace("?", "%QUESTIONMARK%");
format = Regex.Escape(format);
format = format.Replace("%STAR%", @".*?").Replace("%DIGIT%", @"\d")
.Replace("%CHARACTER%", @"\w").Replace("%QUESTIONMARK%", @".");
return new Regex(String.Format("^{0}$", format), RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
}
Gruß, Christian.
Hallo rollerfreak2,
[0-9]{minumum ,maximum}
äh, sorry, das ist Quatsch. Denn innerhalb von {} wird ja die Anzahl der minimal erforderlichen bzw. maximal zulässigen Ziffern angegeben.
Ein Regex für einen Zahlenbereich zu bauen, ist nicht völlig trivial. Für den Bereich 452 - 786 wäre der Pattern z.B. 45[2-9]|4[6-9][0-9]|[5-6][0-9][0-9]|7[0-7][0-9]|78[0-6]. Aber ich denke, man kann trotzdem erkennen, wie man vorgehen muss.
Für deinen Konverter solltest du auch Regex.Escape verwenden.
Den fertigen Konverter kannst du gerne unter .NET-Komponenten und C#-Snippets veröffentlichen.
herbivore
Ich schau mir das Schema mal an und werd das mal einbauen. Den Konverter stell ich dann bei den Snippet's mit rein.
Danke euch.
Again what learned...
Ich hab mal was geschrieben und das unter den Snippets veröffentlicht. Ich hab ein paar Tests dazu geschrieben und die gehen alle durch. Hoffe mal ich hab nichts vergessen. Zu finden ist es hier.
Again what learned...