Ви можете використовувати регулярні вирази для цієї мети, але добре уникати зайвих винятків, коли введення рядкових невідповідностей проти регулярного вираження.
По-перше, щоб уникнути зайвих головних болів від переходу на схему регулярних виразів - ми могли просто використовувати функцію для цієї мети:
String reStrEnding = Regex.Escape("-");
Я знаю, що це нічого не робить - як "-" те саме, що Regex.Escape("=") == "=", але це матиме значення, наприклад, якщо характер є @"\".
Тоді нам потрібно зіставити від прохання рядка до закінчення рядка, або по черзі, якщо закінчення не знайдено - тоді нічого не відповідати. (Порожній рядок)
Regex re = new Regex("^(.*?)" + reStrEnding);
Якщо ваша програма є критичною для продуктивності - тоді окремий рядок для нового Regex, якщо ні - ви можете мати все в одному рядку.
І, нарешті, відповідність рядку та витягуванню узгодженого шаблону:
String matched = re.Match(str).Groups[1].ToString();
Після цього ви можете або написати окрему функцію, як це було зроблено в іншій відповіді, або записати вбудовану лямбда-функцію. Я писав зараз, використовуючи обидві позначення - вбудована лямбда-функція (не дозволяє параметр за замовчуванням) або окремий виклик функції.
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 - зміна шаблону регулярних виразів "^(.*?)(-|$)"дозволить підібрати або до тих пір, поки "-"шаблон не буде знайдений - підберіть все до кінця рядка.