Как я могу получить строку перед символом "-"
с помощью регулярных выражений?
Например, у меня есть "text-1"
, и я хочу вернуть "text"
.
Как я могу получить строку перед символом "-"
с помощью регулярных выражений?
Например, у меня есть "text-1"
, и я хочу вернуть "text"
.
Поэтому я вижу много возможностей для достижения этого.
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, @"^([^-]*)-");
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 вернет полную строку.
Вот мое предложение - это довольно просто:
[^-]*
Я не думаю, что для этого вам нужно регулярное выражение. Я бы посмотрел на SubString вместе с indexOf. Если вам нужна дополнительная помощь, добавьте комментарий, показывающий, что вы пытались, и я предложу дополнительную помощь.
Это что-то вроде регулярного выражения, которое вам нужно:
([^-]*)-
Быстрые тесты в JavaScript:
/([^-]*)-/.exec('text-1')[1] // 'text'
/([^-]*)-/.exec('foo-bar-1')[1] // 'foo'
/([^-]*)-/.exec('-1')[1] // ''
/([^-]*)-/.exec('quux')[1] // explodes
Вы можете просто использовать другой метод, не основанный на регулярном выражении. Кто-то дал предложение использовать подстроку, но вы также можете использовать Split:
string testString = "my-string";
string[] splitString = testString.Split("-");
string resultingString = splitString[0]; //my
См. http://msdn.microsoft.com/en-US/library/ms228388%28v=VS.80%29.aspx для другого хорошего примера.
Если вы хотите использовать RegEx в .NET,
Regex rx = new Regex(@"^([\w]+)(\-)*");
var match = rx.Match("thisis-thefirst");
var text = match.Groups[1].Value;
Assert.AreEqual("thisis", text);
Найти все символы слова и пробела вплоть до -
^[\w ]+-