Для этой цели можно использовать регулярные выражения, но лучше избегать дополнительных исключений, когда входная строка не соответствует регулярному выражению.
Во-первых, чтобы избежать дополнительной головной боли при переходе к шаблону регулярного выражения — мы могли бы просто использовать функцию для этой цели:
String reStrEnding = Regex.Escape("-");
Я знаю, что это ничего не делает - поскольку "-" совпадает с Regex.Escape("=") == "=", но это будет иметь значение, например, если символ @"\".
Затем нам нужно сопоставить начало строки с окончанием строки или, наоборот, если окончание не найдено, то ничего не сопоставить. (Пустой строки)
Regex re = new Regex("^(.*?)" + reStrEnding);
Если ваше приложение критично к производительности - тогда отдельная строка для нового регулярного выражения, если нет - вы можете иметь все в одной строке.
И, наконец, сопоставьте строку и извлеките соответствующий шаблон:
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());
}
}
Кстати, изменение шаблона регулярного выражения на "^(.*?)(-|$)" позволит подобрать либо до шаблона "-", либо, если шаблон не найден - подобрать все до конца строки.
person
TarmoPikaro
schedule
06.01.2019