Ответ 1
Поэтому я вижу много возможностей для достижения этого.
string text = "Foobar-test";
1) Regex Сопоставьте все до первого "-"
Match result = Regex.Match(text, @"^.*?(?=-)");
-
^
соответствует началу строки -
.*?
соответствует любому символу (.
), ноль или более раз (*
), но как можно меньше (?
) -
(?=-)
, пока следующий символ не будет "-" (это положительный взгляд вперед).
2) Regex Сопоставьте все, что не является "-" , начиная с начала строки
Match result2 = Regex.Match(text, @"^[^-]*");
-
[^-]*
соответствует любому символу, который не является "-" ноль или более раз
2) 1) Regex Сопоставьте все, что не является "-" , начиная с начала строки до "-"
Match result21 = Regex.Match(text, @"^([^-]*)-");
- Будет только соответствовать, если в строке есть тире, но результат найден в группе захвата 1.
3) Разделить на "-"
string[] result3 = text.Split('-');
- Результат - это массив, перед первым "-" - это первый элемент в массиве
4) Подстрока до первого "-"
string result4 = text.Substring(0, text.IndexOf("-"));
- Получить подстроку из текста с самого начала до первого появления "-" (
text.IndexOf("-")
)
Вы получаете все результаты (все равно) с этим
Console.WriteLine(result);
Console.WriteLine(result2);
Console.WriteLine(result21.Groups[1]);
Console.WriteLine(result3[0]);
Console.WriteLine(result4);
Я бы предпочел первый метод.
Вам также нужно подумать о поведении, когда в строке нет нити. Четвертый метод будет генерировать исключение в этом случае, потому что text.IndexOf("-")
будет -1
. Метод 1 и 2.1 ничего не вернет, а метод 2 и 3 вернет полную строку.