Anda dapat menggunakan ekspresi reguler untuk tujuan ini, tetapi sebaiknya hindari pengecualian tambahan saat string masukan tidak cocok dengan ekspresi reguler.
Pertama untuk menghindari sakit kepala ekstra karena melarikan diri ke pola regex - kita bisa menggunakan fungsi untuk tujuan itu:
String reStrEnding = Regex.Escape("-");
Saya tahu bahwa ini tidak melakukan apa-apa - karena "-" sama dengan Regex.Escape("=") == "=", tetapi akan membuat perbedaan misalnya jika karakternya @"\".
Kemudian kita perlu mencocokkan dari mengemis string ke string ending, atau bergantian jika ending tidak ditemukan - maka tidak ada yang cocok. (String kosong)
Regex re = new Regex("^(.*?)" + reStrEnding);
Jika aplikasi Anda sangat penting dalam performa - maka pisahkan baris untuk Regex baru, jika tidak - Anda dapat memiliki semuanya dalam satu baris.
Dan akhirnya cocokkan dengan string dan ekstrak pola yang cocok:
String matched = re.Match(str).Groups[1].ToString();
Dan setelah itu Anda dapat menulis fungsi terpisah, seperti yang dilakukan di jawaban lain, atau menulis fungsi lambda sebaris. Saya telah menulis sekarang menggunakan kedua notasi - fungsi lambda inline (tidak mengizinkan parameter default) atau pemanggilan fungsi terpisah.
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 - mengubah pola regex menjadi "^(.*?)(-|$)"akan memungkinkan untuk mengambil baik sampai "-"pola atau jika pola tidak ditemukan - ambil semuanya sampai akhir string.