在' \'之后抓住这个部分。使用正则表达式

时间:2014-06-13 14:39:01

标签: c# .net regex

我有一个问题,我认为有助于使用正则表达式,但我不确定所有语法如何适用于我的特定情况。我有一个字符串,其格式始终为Company\user我只想在\之后抓取字符串但是我不想包含\

我的尝试是这样的:

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

但是这只产生了空字符串。怎么做到这一点?

5 个答案:

答案 0 :(得分:3)

如果您使用Substring方法,您可以轻松完成此任务(并以更易读的方式)。

正如评论所示,以下内容符合您的目的:

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

以下是有关MSDN子字符串的更多信息:http://msdn.microsoft.com/en-us/library/aka44szs(v=vs.110).aspx

答案 1 :(得分:2)

在Regex中解决它:

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

(?<=\\)是一个与字符串的\部分匹配的lookbehind,但在最终匹配中不捕获它。

但我同意@ MatthewWatson使用Split的答案是理想的,如果你不需要正则表达式解决方案。

答案 2 :(得分:2)

只是为了提供第三种方法(为简洁省略了错误处理!):

var user = userName.Split('\\')[1];

答案 3 :(得分:1)

var m = Regex.Match(@"Company\User", @"[^\\]+\\(.+)");
if (m.Groups.Count > 1)
{
    var user = m.Groups[1].Value;
}

答案 4 :(得分: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"
}