Sie können zu diesem Zweck reguläre Ausdrücke verwenden. Es ist jedoch ratsam, zusätzliche Ausnahmen zu vermeiden, wenn die Eingabezeichenfolge nicht mit dem regulären Ausdruck übereinstimmt.
Erstens, um zusätzliche Kopfschmerzen beim Entkommen in das Regex-Muster zu vermeiden, könnten wir einfach die Funktion für diesen Zweck verwenden:
String reStrEnding = Regex.Escape("-");
Ich weiß, dass dies nichts bewirkt - da "-" dasselbe ist wie Regex.Escape("=") == "=", aber es wird zum Beispiel einen Unterschied machen, wenn Charakter ist@"\" .
Dann müssen wir vom Betteln des Strings zum Ende des Strings passen, oder alternativ, wenn das Ende nicht gefunden wird - dann nichts übereinstimmen. (Leerer String)
Regex re = new Regex("^(.*?)" + reStrEnding);
Wenn Ihre Anwendung leistungskritisch ist - wenn nicht, separate Zeile für neuen Regex -, können Sie alles in einer Zeile haben.
Und schließlich gegen String stimmen und passendes Muster extrahieren:
String matched = re.Match(str).Groups[1].ToString();
Danach können Sie entweder eine separate Funktion schreiben, wie dies in einer anderen Antwort der Fall war, oder eine Inline-Lambda-Funktion schreiben. Ich habe jetzt mit beiden Notationen geschrieben - Inline-Lambda-Funktion (erlaubt keine Standardparameter) oder separaten Funktionsaufruf.
using System;
using System.Text.RegularExpressions;
static class Helper
{
public static string GetUntilOrEmpty(this string text, string stopAt = "-")
{
return new Regex("^(.*?)" + Regex.Escape(stopAt)).Match(text).Groups[1].Value;
}
}
class Program
{
static void Main(string[] args)
{
Regex re = new Regex("^(.*?)-");
Func<String, String> untilSlash = (s) => { return re.Match(s).Groups[1].ToString(); };
Console.WriteLine(untilSlash("223232-1.jpg"));
Console.WriteLine(untilSlash("443-2.jpg"));
Console.WriteLine(untilSlash("34443553-5.jpg"));
Console.WriteLine(untilSlash("noEnding(will result in empty string)"));
Console.WriteLine(untilSlash(""));
// Throws exception: Console.WriteLine(untilSlash(null));
Console.WriteLine("443-2.jpg".GetUntilOrEmpty());
}
}
Übrigens: Wenn Sie das Regex-Muster so ändern, "^(.*?)(-|$)"dass es entweder bis zum "-"Muster aufgenommen wird oder wenn das Muster nicht gefunden wurde, nehmen Sie alles bis zum Ende der Zeichenfolge auf.