REGEX - 从专有名称中提取 OU

REGEX - Extract OU from Distinguished Name

我需要使用 REGEX 从我的专有名称中提取 "OU" 部分。

例如:

"CN=DAVID Jean Louis (a),OU=Coiffeur,OU=France,DC=Paris,DC=France"

"CN=PROVOST Franck,OU=Coiffeur,OU=France,DC=Paris,DC=France"

"CN=SZHARCOFF Michel (AB),OU=Coiffeur_Inter,OU=France,DC=Paris,DC=France"

我需要

"OU=Coiffeur,OU=France"  

"OU=Coiffeur,OU=France"

"OU=Coiffeur_Inter,OU=France"

我试试"CN=SZHARCOFF Michel (AB),OU=Coiffeur_Inter,OU=France,DC=Paris,DC=France" -match "^CN=[\w-()]*[\w]*" 但是没有成功

您可以将所有 OU= + 1 个或多个非逗号子字符串与 \bOU=[^,]+ 正则表达式匹配,然后将它们与 ,:

连接
$matches = [regex]::matches($s, '\bOU=[^,]+') | % { $_.value }
$res = $matches -join ','

第一个字符串的输出:

OU=Coiffeur,OU=France

图案详情

  • \b - 只匹配 OU 整个词的词边界
  • OU= - 文字子串
  • [^,]+ - 1 个或多个 (+) 个字符,而不是逗号(因为 [^...]negated character class)逗号。

参见regex demo

此模式将支持包含逗号的 DistinguishedName 属性,并为匹配项提供命名组。我在 PowerShell 中使用它来解析 ADObject 的父 DN 等。

^(?:(?<cn>CN=(?<name>.*?)),)?(?<parent>(?:(?<path>(?:CN|OU).*?),)?(?<domain>(?:DC=.*)+))$

参见 Regexr 演示:https://regexr.com/5bt64