Редактировать: Оказывается, мой код ниже работает, просто не при вводе значений из отладчика. Пример одиночного обратного слэша не удался при вводе из отладчика, потому что одна обратная косая черта была обработана как escape-символ, а не обратная косая черта.Использование C# regex для получения слов после одного или нескольких символов «»
Я пытаюсь получить пользовательский псевдоним из строки, которая может быть любой из следующих входов:
- псевдоним домен
- \ псевдоним
- домен \\ псевдоним
Моего 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;
}
Я просто запустил это, и я получаю «псевдоним» для всех трех. Есть ли что-то еще для кода? – Jacob
Считаете ли вы использование 'input.Split ('\\'). Last()' вместо регулярного выражения? –
Как сказал @Jacob, это работает (переход на вкладку «контекст»): [буря регулярного выражения] (http://regexstorm.net/tester?p= (. *% 5c% 5c) (. *) & I = alias % 0d% 0adomain% 5calias% 0d% 0adomain% 5c% 5calias% 0d% 0a & r =% 242) – Kobi