PowerShell规范化名称列表

时间:2016-02-18 19:49:31

标签: regex powershell

我在系统中有一些非常混乱的名字,我试图在AD中匹配名字和姓氏。只需要解析字符串。我的名字如下:

  • Hagstrom,N.P。,Ana(Analise)
  • Banas,R.N.,Cynthia
  • Saltzmann,N.P.,April
  • 李,克里斯托弗
  • Rajaram,Pharm.D。,Sharmee
  • Goode Jr,John(Jack)L
  • Reyes,R.N.,Meghan
  • Miller,M.S.,Adrienne M
  • 查韦斯,加布里埃拉
  • Stevens,MS,CCC-SLP,Christopher
  • Lockwood Flores,R.N.,Jessica

我试过这个,但由于某种原因,GivenName没有被正确地返回。

$Name = "Saltzmann, N.P., April"

    $GivenName = $Name.Split(",")[$Name.Split(",").GetUpperBound(0)]
    $SN = $Name.Split(",")[0]

    If ($SN.IndexOf("-") -gt -1) { 
     $HypenLast = $SN.Split("-")[0]
     $SNName = $SN.Split("-")[1]
        }

        If ($GivenName.IndexOf(" ") -gt -1) {
     $GivenName = $GivenName.Replace("(","").Replace(")","").Split(" ")[0]
     $MiddleName =$GivenName.Replace("(","").Replace(")","").Split(" ")[1]
        }

尝试在第一个逗号和最后一个逗号之后的所有内容之前取一切,但在第一个名字的第二个空格之前取字母。 尝试获取LastName FirstName,然后需要将其翻转为FirstName LastName。感谢。

1 个答案:

答案 0 :(得分:0)

所有名称都可以通过管道传输到使用带有一些命名捕获组的正则表达式的脚本块。可以提取指定的捕获组值,以使用字符串插值重建所需的名称。

$nameList | ForEach-Object {
    $match = [Text.RegularExpression.Regex]::Match($_, "(?<last>[\w\s]+),(?:.*,)?(?:\s*)(?<first>\w+)")
    $lastName = $match.Groups["last"].Value
    $firstName = $match.Groups["first"].Value
    "$firstName $lastName"
}