У меня есть проблема, которая, как мне кажется, подходит для использования регулярных выражений, однако я не уверен, как весь синтаксис работает для моего конкретного случая. У меня есть строка, которая всегда будет в форме Company\user
Я просто хотел бы захватить строку после \
Однако я не хочу включать \
Моя попытка состояла в следующем:
var user = Regex.Match(userName,@"\*").ToString();
Но это привело только к пустой строке. Как достичь этого?
Если вы используете метод подстроки, вы можете сделать это легко (и более читаемым образом).
Как следует из комментариев, следующее будет служить вашей цели:
userName.Substring(userName.IndexOf('\\')+1)
Ниже приведена дополнительная информация о подстроке из MSDN: http://msdn.microsoft.com/en-us/library/aka44szs(v=vs.110).aspx
Чтобы решить эту проблему в Regex:
var user = Regex.Match(userName, @"(?<=\\).*").ToString();
(?<=\\)
является lookbehind, который соответствует \
part строки, но не фиксирует его в финальном матче.
Однако я согласен с тем, что ответ @MatthewWatson с использованием Split идеален, если вы не требуете регулярного выражения.
Просто чтобы сделать третий способ сделать это (обработка ошибок опущена для краткости!):
var user = userName.Split('\\')[1];
Я бы разобрал его так:
var text = "Company\\Luke Skywalker";
var regex = new Regex(
"^Company\\\\(?<user>.*?)$",
RegexOptions.IgnoreCase | RegexOptions.Singleline
);
var matches = regex.Match(text);
if (matches.Success) {
var user = matches.Groups["user"].Value;
// "Luke Skywalker"
}
var m = Regex.Match(@"Company\User", @"[^\\]+\\(.+)");
if (m.Groups.Count > 1)
{
var user = m.Groups[1].Value;
}
userName.Substring(userName.IndexOf('\\')+1)
var user = Regex.Match(userName, @".*\\(.*)").Groups[1].ToString();