我有一个包含超过 54000 个名称的广告摘录,通常采用这种格式(示例数据):
Barnes, Bob B [WST]
Santiago, Francis AB [AT]
Chandler, Ronald
Jefferson, Katherine T [NT]
Forrest, Stan S [WST]
El Guerrero, Annette BMD [AT]
Lopez, Todd TA [CNT]
Jackson, Lincoln F [NT]
Nunez, Mattie Joey LC [WST]
Moran, David DA [AT]
Gowan, Darryl V
Hansen, Rick AF [NT]
Lowe, Denise DR [WST]
Butler, Doug D [AT]
Kim, Erika
不幸的是,这种格式在整个数据中并不一致。有时,没有 MI,或者可能有最多 3 个 MI。此外,[RGN] 并不总是存在。更糟糕的是,有相当多的名字中也有空格(例如 Da Vinci)。
我需要清理这些名字,以便它们读作:
LastName,FirstName
我尝试使用 LEFT、RIGHT 和文本转列函数,但收效甚微。到目前为止,最好的结果是使用空格分隔的文本转列方法,然后使用 (a1&" "&b1) 将它们连接起来。这只适用于一半的名称,目前,我计划继续连接单元格 (a1&b1&c1 等),然后手动检查名称以确保它们正确。我祈祷并希望有人能拯救我和我的眼睛,让我不要这样做,并有一个想法让我尝试。
答案1
我用RegEx 查找/替换插件具有启用正则表达式的工作表功能。
这样您就可以轻松删除 MI 和 RGN:
=RegExReplace(A1," [A-Z ]*(\[.*)*","",-1)
寻找模式
" [A-Z ]*(\[.*)*"
匹配名称后的空格
[A-Z ]*
可选匹配首字母(\[.*)*
可选匹配区域
- 将其替换为无
""
- 只替换最后一次出现的内容
-1
答案2
使用正则表达式或类似的东西将该字符串拆分为三部分。LastName、FirstName、extra。
您可能可以使用相同的功能将额外内容拆分为 MI 和 RGN,假设您有一个简短的 RGN(区域?)列表。
使用逗号作为分隔符将姓氏从前面拉出来很容易。查找带有空格的名字可能更难。但是,假设有 3 个中间名的首字母是单个,则可以查找第一个单个字符作为第一个中间名首字母。在此之前的所有内容都是名字。
无论你做什么,都要分阶段进行。把姓氏去掉,因为这很容易。其余的是 FirstName MI [RGN]。如果在有地区的地方有括号,那么这也很容易。去掉那些。
这样就剩下 FirstName MI。我会从右到左进行操作。如果最后一个字符是空格,则删除它。如果它是一个字符,并且它左边的字符是空格,那么它就是首字母。将其拉出并添加到 MI 目标字段的前面。重复操作,直到出现多字符字符串。这是 FirstName 的结尾。恭喜,您已完成全部拆分。
另一个问题:您能否返回 AD 并重新导出并获取各个字段而不是显示名称?(powershell,Get-ADUser ...
)重新组合显示名称比执行我刚才列出的操作要容易得多。