编辑:事实证明我的代码确实有效,而不是从调试器输入值时。从调试器输入时,单个反斜杠示例失败,因为单个反斜杠被视为转义字符而不是反斜杠。
我正在尝试从字符串中获取用户别名,该字符串可能是以下任何一个输入:
我的C#正则表达式模式如下:
string pattern = @"(.*\\)(.*)";
我在代码中这样做:
string alias = Regex.Replace(input, pattern, "$2", RegexOptions.None);
返回:
请注意,它不适用于#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;
}
答案 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());