Bu amaçla normal ifadeler kullanabilirsiniz, ancak girdi dizesi normal ifadeye karşı uyuşmadığında ekstra istisnalardan kaçınmak iyidir.
İlk olarak, normal ifade kalıbına kaçmanın ekstra baş ağrısından kaçınmak için - sadece bu amaç için işlevi kullanabiliriz:
String reStrEnding = Regex.Escape("-");
Bunun hiçbir şey yapmadığını biliyorum - "-" ile aynı Regex.Escape("=") == "="şeydir, ancak örneğin karakterin olması durumunda fark yaratacaktır @"\".
O zaman dizenin başından dizge sonuna kadar eşleşmemiz gerekir veya alternatif olarak eğer son bulunmazsa - hiçbir şeyle eşleşmez. (Boş dize)
Regex re = new Regex("^(.*?)" + reStrEnding);
Uygulamanız performans açısından kritikse - o zaman yeni Regex için ayrı bir satır, değilse - her şeyi tek satırda alabilirsiniz.
Ve son olarak dizeyle eşleştirin ve eşleşen kalıbı çıkarın:
String matched = re.Match(str).Groups[1].ToString();
Bundan sonra, başka bir cevapta yapıldığı gibi ayrı bir fonksiyon yazabilir veya satır içi lambda fonksiyonu yazabilirsiniz. Şimdi her iki gösterimi de kullanarak yazdım - satır içi lambda işlevi (varsayılan parametreye izin vermez) veya ayrı işlev çağrısı.
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());
}
}
Btw - düzenli ifade kalıbını olarak değiştirmek, kalıp "^(.*?)(-|$)"bulunana kadar "-"veya kalıp bulunamazsa, dizenin sonuna kadar her şeyi toplayın.