使用C#正则表达式获取一个或多个之后的任何单词" \"人物

时间:2015-02-23 18:24:26

标签: c# regex backslash

编辑:事实证明我的代码确实有效,而不是从调试器输入值时。从调试器输入时,单个反斜杠示例失败,因为单个反斜杠被视为转义字符而不是反斜杠。

我正在尝试从字符串中获取用户别名,该字符串可能是以下任何一个输入:

  1. 别名
  2. 域\别名
  3. 域\\别名
  4. 我的C#正则表达式模式如下:

    string pattern = @"(.*\\)(.*)";
    

    我在代码中这样做:

    string alias = Regex.Replace(input, pattern, "$2", RegexOptions.None);
    

    返回:

    1. 别名
    2. 域\别名
    3. 别名
    4. 请注意,它不适用于#2(使用单个'\')。使这项工作的解决方案是什么?

      以下是该方法的确切代码(对不起,如果格式不正确):

      private string[] CreateEmailArrayFromString(string p)
      {
          string[] address = new string[] { string.Empty };
          if (p != null)
          {
              address = p.Split(new char[] { ';', ',', ' ' }, StringSplitOptions.RemoveEmptyEntries);
              for (int i = 0; i < address.Length; i++)
              {
                  if (address[i].Contains("@") == false)
                  {
                      string pattern = @"(.*\\)(.*)";
                      address[i] = Regex.Replace(address[i], pattern, "$2", RegexOptions.None);
                      address[i] = string.Concat(address[i].Trim(), "@mycompany.com");
                  }
              }
          }
          return address;
      }
      

2 个答案:

答案 0 :(得分:1)

此代码 工作:

string pattern = @"(.*\\)(.*)";
string alias = Regex.Replace(input, pattern, "$2", RegexOptions.None);

如果输入来自调试器,它可能不起作用。这就是我的情况。

答案 1 :(得分:0)

这是一个适用于所有三种情况的LINQ解决方案:

string str = @"domain\\alias";
string str2 = @"domain\alias";
string str3 = @"alias";

string res = new string(str.Reverse().TakeWhile(c => c != '\\').Reverse().ToArray());