Как извлечь подстроку «Amy Java» из строки ниже в C#?Извлечь подстроку из строки
CN=Amy Java,OU=Singapore,OU=Users,DC=domain,DC=com
Как извлечь подстроку «Amy Java» из строки ниже в C#?Извлечь подстроку из строки
CN=Amy Java,OU=Singapore,OU=Users,DC=domain,DC=com
это все, что вам нужно.
string result = str.Split(',')[0].Split('=')[1];
Это работает для меня:
var amyJavaText =
"CN=Amy Java,OU=Singapore,OU=Users,DC=domain,DC=com"
.Split(',')
.Select(x => x.Split('='))
.ToLookup(x => x[0], x => x[1])["CN"]
.First();
это немного перебор, но мне нравится, что вы искали ключ – Doruk
Надеюсь, что имя не имеет каких-либо экранированных/цитируемых символов ',' или '=' в ... – Rawling
@Rawling - Да, согласен. – Enigmativity
В дополнении к более общему образу, вы можете создать Dictionary
(в случае уникальных значений в строках при условии) или Списке KeyValuePair
(для текущего примера строки) следующим образом:
var str = "CN=Amy Java,OU=Singapore,OU=Users,DC=domain,DC=com";
var dict = str.Split(',').Select(s=> s.Split('=')).ToDictionary(a => a[0].Trim(), a => a[1].Trim()); //Only if Key are unique
var kvp = str.Split(',').Select(s=> s.Split('=')).Select(a=> new KeyValuePair<string,string>(a[0].Trim(), a[1].Trim()));
Затем вы можете использовать другой Linq
для выбора ключа требуется.
var requiredValue = kvp.Where(u=> u.Key == "CN").Value;
предоставит вам требуемое значение.
private string[] FindKeyValue(string str, string key)
{
return str.Split(",".ToCharArray())
.Select(x => x.Split("=".ToCharArray()))
.Where(x => x[0] == key).Select(x => x[1]).ToArray();
}
Предполагая, что вы хотите знать значение CN, OU, DC и т.д. Строка у вас есть, выглядит как ключевой пары значений, где «CN» является ключевым и «Amy Java» это значение. Кажется, что ключ может присутствовать несколько раз в строке. Поэтому у вас есть несколько значений для ключа. Используйте его следующим образом:
var str1 = "CN=Amy Java,OU=Singapore,OU=Users,DC=domain,DC=com";
string[] valuesOfCN = FindKeyValue(str1, "CN");
Если вы хотите только одно значение, например, как первое значение, то используйте
var str1 = "CN=Amy Java,OU=Singapore,OU=Users,DC=domain,DC=com";
string firstValueOfCN = FindKeyValue(str1, "CN").First();
Вы пробовали что-нибудь ?, затем добавить в этом вопросе. –
От внешнего облика; это строка LDAP. В этом случае вы можете получить доменное имя. – A3006
Я получаю указанную выше строку в текстовом поле, и из этого мне нужно извлечь подстроку «Amy Java» –