我想从下面的字符串中提取“James\,Brown”,但我不总是知道名称是什么。逗号让我有些困难,你有什么建议可以提取James\,Brown?
OU = James \,Brown,OU = Test,DC = Internal,DC = Net
谢谢
OU = James \,Brown,OU = Test,DC = Internal,DC = Net
谢谢
static string ParseName(string arg) {
var regex = new Regex(@"^OU=([a-zA-Z\\]+\,\s+[a-zA-Z\\]+)\,.*$");
var match = regex.Match(arg);
return match.Groups[1].Value;
}
您可以使用正则表达式:
string input = @"OU=James\, Brown,OU=Test,DC=Internal,DC=Net";
Match m = Regex.Match(input, "^OU=(.*?),OU=.*$");
Console.WriteLine(m.Groups[1].Value);
string name = @"OU=James\, Brown,OU=Test,DC=Internal,DC=Net";
string[] splitUp = name.Split("=".ToCharArray(),3);
string namePart = splitUp[1].Replace(",OU","");
Console.WriteLine(namePart);
我不一定会推崇这种方法,但我刚刚从部门的圣诞午餐回来,我的大脑还没有完全参与。
(注:该句话涉及个人观点,仅供参考)
Regex rx = new Regex(@"(?<!\\),");
String test = "OU=James\\, Brown,OU=Test,DC=Internal,DC=Net";
String[] segments = rx.Split(test);
但是从那里开始,我会手动拆分数组中的参数,这样您就不必使用依赖于多个分隔符字符的正则表达式。由于这看起来像是一个LDAP查询,如果您总是查看params [0],可能并不重要,但有可能名称被设置为“CN =”。您可以通过以下方式读取查询来涵盖两种情况:
String name = segments[0].Split('=', 2)[1];
string line = GetStringFromWherever();
int start = line.IndexOf("=") + 1;//+1 to get start of name
int end = line.IndexOf("OU=",start) -1; //-1 to remove comma
string name = line.Substring(start, end - start);
如果语法不太对,请谅解 - 我是凭记忆写的。显然,这种方法不够健壮,如果格式发生变化就会失败。
如果斜杠始终存在,我会考虑使用正则表达式进行匹配,您可以使用匹配组来匹配名字的最后和第一部分。
^OU=([a-zA-Z])\,\s([a-zA-Z])
这个正则表达式将匹配只包含字符的名称,您需要对其进行精细调整以更好地匹配非标准名称。 这里有一个正则表达式测试器,如果您选择使用此方法,它可以帮助您完成。
假设您正在运行Windows,使用PInvoke与DsUnquoteRdnValueW
。 有关代码,请参见我对另一个问题的回答:https://dev59.com/i0nSa4cB1Zd3GeqPNWFu#11091804
将 \ 替换为您自己喜欢的魔术字符串(例如 & #44;),在剩余逗号处拆分或搜索到第一个逗号,然后用单个逗号替换您的魔术字符串。
例如:
string originalStr = @"OU=James\, Brown,OU=Test,DC=Internal,DC=Net";
string replacedStr = originalStr.Replace("\,", ",");
string name = replacedStr.Substring(0, replacedStr.IndexOf(","));
Console.WriteLine(name.Replace(",", ","));