【问题标题】:Need regular expression pattern to get the distinguished name separated?需要正则表达式模式来区分可分辨名称吗?
【发布时间】:2014-11-24 15:05:48
【问题描述】:

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

"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

【问题讨论】:

  • @KonradKokosa,除了第二行,他想保留分号。
  • 你试过什么?

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


【解决方案1】:

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

这是(?<!pattern) 的形式,您希望它匹配但忽略反斜杠[\\],然后最后匹配分号,因此完整模式变为@"(?<![\\]);"

string dn = @"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";

string[] vals = Regex.Split(dn, @"(?<![\\]);");
foreach (var val in vals)
{
    Console.WriteLine(val);
}

输出:

  • 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

【讨论】:

    【解决方案2】:

    试试这个模式(?i:;)?([^&gt;]+?local)

    【讨论】:

    • 如果不是DC=local怎么办?
    【解决方案3】:
    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
    

    【讨论】:

    • 如果不是DC=local怎么办?
    【解决方案4】:

    你可以使用这个模式

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

    Demo

    或者这个模式

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

    Demo

    【讨论】:

      猜你喜欢
      • 2020-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-11
      • 2019-08-09
      • 1970-01-01
      • 1970-01-01
      • 2018-05-13
      相关资源
      最近更新 更多