使用String.Replace

时间:2015-06-29 18:13:58

标签: regex powershell

我正在尝试删除Active Directory" DistinguishedName"归因于最具体的OU标题。例如,我得到了:

CN=Smith\, Tom,OU=Developers,OU=Users,DC=myOrganization,DC=com

我希望将其简化为:

Developers

我尝试过这样做没有成功(假设变量正在存储如上所述的DistinguisedName):

$disName = $disName.Replace("CN(*)OU=", "")
$disName = $disName.Replace(",OU(*)=com", "")

这些陈述对字符串没有任何改变。

我不熟悉在Powershell中使用正则表达式,所以我假设我只是犯了一个语法错误,但概念是正确的。

3 个答案:

答案 0 :(得分:2)

正如其他人已经建议的那样,使用正则表达式进行此类数据提取比较简单,因为Plotter (int dotsPerPx, Canvas canvas_) { this.dotsPerPx = dotsPerPx; this.canvas = canvas_; } int dotsPerPx; //This one gets set to 1, as supposed Canvas canvas; //And this remains null, though canvas_==openGLCanvas{...} int screenWidth = canvas.getWidth(); //NullPointerException! 不支持非贪婪匹配等内容。不过我建议使用稍微复杂的正则表达式:

String.Replace

因为当OU名称包含空格或逗号等字符时,到目前为止所提出的建议会产生不良结果。

演示:

^.*?,\s*ou=(.*?),\s*(?:ou|dc).*$

答案 1 :(得分:0)

您可以使用正则表达式:

$attribute = "CN=Smith\, Tom,OU=Developers,OU=Users,DC=myOrganization,DC=com"    
[regex]::Match($attribute, 'OU=(\w+),').Groups[1].Value

输出:

  

开发

答案 2 :(得分:0)

^CN.*?OU=|,.*$

您可以使用它并替换为empty string。请参阅演示。

https://regex101.com/r/rX1tE6/6