我有一個包含超過 54000 個名稱的 AD 摘錄,通常採用以下格式(範例資料):
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] 並不總是存在。更糟的是,有相當多的名字中也有空格(例如達文西)。
我需要清理這些名字,以便它們可以讀取:
姓氏、名字
我嘗試使用 LEFT、RIGHT 和 Text-to-Columns 函數,但收效甚微。到目前為止,最好的結果是用空格分隔的文字到列方法,然後使用 (a1&" "&b1) 將它們連接起來。這僅適用於大約一半的名稱,目前,我計劃繼續加入單元格(a1&b1&c1等),然後手動檢查名稱以確保它們是正確的。我正在祈禱,希望有人能拯救我和我的眼睛,讓我避免這樣做,並有一個想法讓我嘗試。
答案1
我用正規表示式尋找/取代插件具有啟用正規表示式的工作表功能。
這樣您就可以輕鬆刪除 MI 和 RGN:
=RegExReplace(A1," [A-Z ]*(\[.*)*","",-1)
尋找模式
" [A-Z ]*(\[.*)*"
匹配名稱後的空格
[A-Z ]*
可選地匹配首字母縮寫(\[.*)*
可選地匹配區域
- 將其替換為空白
""
- 只替換最後一次出現的位置
-1
答案2
使用正規表示式或類似的東西將該字串拆分為三個部分。姓氏、名字、其他。
假設您有一個簡短的 RGN 清單(區域?),您可能可以使用相同的功能將額外部分分割為 MI 和 RGN。
使用逗號作為分隔符號將姓氏從前面去掉很容易。尋找帶有空格的名字可能會更困難。但是,假設具有 3 個 MI 的字元具有單首字母,您可以找到第一個單一字元作為第一個中間首字母。前面的任何內容都是名字。
無論做什麼,都要分階段進行。把姓氏去掉,因為這很容易。其餘部分是 FirstName MI [RGN]。如果有區域的地方存在括號,那麼這也很容易。把那些脫掉。
剩下的就是 FirstName MI。我會從右到左工作。如果最後一個字元是空格,請將其刪除。如果它是一個字符,而且它左邊的字符是一個空格,那麼它就是一個首字母。將其拉出並將其新增至 MI 目標欄位的前面。重複此操作,直到出現多字元字串。這是名字的結尾。恭喜,您已完成全部拆分。
另一個問題:您可以返回 AD 並重新匯出並獲取各個欄位而不是顯示名稱嗎? (powershell,Get-ADUser ...
)重新組合顯示名稱比執行我剛才列出的操作要容易得多。