Возьмите часть после '\' с помощью регулярного выражения

1

У меня есть проблема, которая, как мне кажется, подходит для использования регулярных выражений, однако я не уверен, как весь синтаксис работает для моего конкретного случая. У меня есть строка, которая всегда будет в форме Company\user Я просто хотел бы захватить строку после \ Однако я не хочу включать \

Моя попытка состояла в следующем:

var user = Regex.Match(userName,@"\*").ToString();

Но это привело только к пустой строке. Как достичь этого?

  • 5
    Вам действительно нужно регулярное выражение? Что с userName.Substring(userName.IndexOf('\\')+1)
  • 0
    Договорились - я бы использовал IndexOf. Но если вы действительно хотите использовать regex: var user = Regex.Match(userName, @".*\\(.*)").Groups[1].ToString();
Показать ещё 2 комментария
Теги:

5 ответов

3
Лучший ответ

Если вы используете метод подстроки, вы можете сделать это легко (и более читаемым образом).

Как следует из комментариев, следующее будет служить вашей цели:

userName.Substring(userName.IndexOf('\\')+1)

Ниже приведена дополнительная информация о подстроке из MSDN: http://msdn.microsoft.com/en-us/library/aka44szs(v=vs.110).aspx

2

Чтобы решить эту проблему в Regex:

var user = Regex.Match(userName, @"(?<=\\).*").ToString();

(?<=\\) является lookbehind, который соответствует \ part строки, но не фиксирует его в финальном матче.

Однако я согласен с тем, что ответ @MatthewWatson с использованием Split идеален, если вы не требуете регулярного выражения.

2

Просто чтобы сделать третий способ сделать это (обработка ошибок опущена для краткости!):

var user = userName.Split('\\')[1];
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"
}
1
var m = Regex.Match(@"Company\User", @"[^\\]+\\(.+)");
if (m.Groups.Count > 1)
{
    var user = m.Groups[1].Value;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню