【问题标题】:PowerShell Normalize List of NamesPowerShell 规范化名称列表
【发布时间】:2016-02-18 19:49:31
【问题描述】:

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

  • 哈格斯特罗姆,N.P.,安娜(分析)
  • 巴纳斯,注册护士,辛西娅
  • Saltzmann,N.P.,四月
  • 李,克里斯托弗
  • Rajaram,Pharm.D.,Sharmee
  • 小古德,约翰(杰克)L
  • 雷耶斯,注册护士,梅根
  • Miller, M.S., Adrienne M
  • 查韦斯,加布里埃拉
  • 史蒂文斯,硕士,CCC-SLP,克里斯托弗
  • 洛克伍德弗洛雷斯,注册护士,杰西卡

我已经尝试过了,但由于某种原因,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。谢谢。

【问题讨论】:

  • Stack Overflow 不是一个请求脚本的地方......它是一个提供关于您提供的编码和脚本的提示和建议的地方。你应该先尝试自己做。
  • 不只是给你代码尝试以下。 1)在字符串对象上使用 .Split(',') 方法将字符串分解为数组。 2) 使用这些数组字符串并使用 .Trim() 方法删除垃圾空格 3) 使用 $var[index] 构建您需要的格式。
  • 这是 RegEx 大展拳脚并嘲笑您的文本解析问题微不足道的地方。有用的链接:RegEx General InfoPopular RegEx Testing Site

标签: regex powershell


【解决方案1】:

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

$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"
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-26
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    • 2020-12-11
    相关资源
    最近更新 更多