需要正则表达式模式才能将专有名称分开?

时间:2014-11-24 15:05:48

标签: c# .net regex c#-4.0

以下字符串包含由分号连接的多个可分辨名称。我需要使用正则表达式模式来区分可分辨名称。

"CN=s\,tttrrr,OU=OU1,DC=dom1,DC=local;CN=g\;hi\,klm,OU=OU1,DC=dom1,DC=local;CN=rrr\ttt,OU=OU1,DC=dom1,DC=local;CN=Vvvv,OU=OU1,DC=dom1,DC=local"

需要的结果:

CN=s\,tttrrr,OU=OU1,DC=dom1,DC=local
CN=g\;hi\,klm,OU=OU1,DC=dom1,DC=local
CN=rrr\ttt,OU=OU1,DC=dom1,DC=local
CN=Vvvv,OU=OU1,DC=dom1,DC=local

4 个答案:

答案 0 :(得分:2)

您需要对分号进行Regex.Split,但使用Zero-width negative lookbehind assertion.排除反斜杠转义的内容 - 基本上检查分号之前与{不匹配}的内容{1}},但不要将其包含在拆分中。

此格式为\,您希望此格式匹配但忽略反斜杠(?<!pattern),然后最后匹配分号,因此完整模式变为[\\]

@"(?<![\\]);"

输出:

  • CN = S \,tttrrr,OU = OU1,DC = DOM1,DC =本地
  • CN =克\;喜\,KLM,OU = OU1,DC = DOM1,DC =本地
  • CN = RRR \ TTT,OU = OU1,DC = DOM1,DC =本地
  • CN = VVVV,OU = OU1,DC = DOM1,DC =本地

答案 1 :(得分:0)

尝试此模式(?i:;)?([^>]+?local)

答案 2 :(得分:0)

string input= @"CN=s\,tttrrr,OU=OU1,DC=dom1,DC=local;CN=g\;hi\,klm,OU=OU1,DC=dom1,DC=local;CN=rrr\ttt,OU=OU1,DC=dom1,DC=local;CN=Vvvv,OU=OU1,DC=dom1,DC=local";
Regex pattern = new Regex(@"(?<=local);");
string[] result = pattern.Split(input);
result.ToList().ForEach(a => Console.WriteLine(a));

输出:

CN=s\,tttrrr,OU=OU1,DC=dom1,DC=local
CN=g\;hi\,klm,OU=OU1,DC=dom1,DC=local
CN=rrr\ttt,OU=OU1,DC=dom1,DC=local
CN=Vvvv,OU=OU1,DC=dom1,DC=local

答案 3 :(得分:0)

你可以使用这种模式

(CN=(?:(?!CN=).)*)(?:;|$)  

Demo

或此模式

(CN=(?:[^C]|C(?!N=))*)(?:;|$)  

Demo