2

У меня есть выдержка из AD с более чем 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  

К сожалению, этот формат не согласован с данными. Время от времени не будет ИМ или может быть до 3 ИМ. Кроме того, [RGN] не всегда присутствует. И что еще хуже, есть немало имен, в которых также есть пробелы (напр. Да Винчи).

Мне нужно очистить эти имена, чтобы они читали:
Фамилия Имя

Я пытался использовать функции LEFT, RIGHT и Text-to-Columns с минимальным успехом. Пока что лучшим результатом является метод Text-to-Columns, разделенный пробелом и затем соединяющий их с помощью (a1 & "" & b1). Это работает только для половины имен, и в настоящее время я планирую продолжить объединение ячеек (a1 & b1 & c1 и т.д.), А затем вручную проверять имена, чтобы убедиться в их правильности. Я молюсь и надеюсь, что кто-то может спасти меня и мои глаза от этого, и у меня есть идея попробовать.

2 ответа2

2

Я использую надстройку поиска / замены RegEx, чтобы иметь функцию листа с включенным регулярным выражением.

С этим вы можете легко удалить MI & RGN:

=RegExReplace(A1," [A-Z ]*(\[.*)*","",-1)

  1. Найти шаблон " [A-Z ]*(\[.*)*"

    • соответствует пробелу после имени
    • [A-Z ]* опционально соответствует инициалам
    • (\[.*)* опционально соответствует региону
  2. заменяет его на ничто ""
  3. заменяет только последнее вхождение -1

0

Используйте регулярное выражение или что-то подобное, чтобы разбить эту строку на три части. LastName, FirstName, дополнительно.

Вероятно, вы можете использовать ту же функциональность для разделения дополнительных функций на MI и RGN, при условии, что у вас есть короткий список RGN (регионов?).

Используя запятую в качестве разделителя, вытащить фамилию с фронта очень просто. Найти имена с пробелами может быть сложнее. Тем не менее, предполагая, что те, у кого 3 MI, имеют одинаковые инициалы, вы можете найти первый отдельный символ в качестве первого среднего инициала. Все, что до этого - это имя.

Что бы вы ни делали, делайте это поэтапно. Сними фамилии, так как это легко. Остальная часть - FirstName MI [RGN]. Если скобки существуют там, где есть регион, это тоже легко. Сними их.

Это оставляет FirstName MI. Я бы работал справа налево. Если последний символ - пробел, отбросьте его. Если это символ, а слева от него - пробел, то это инициал. Вытащите его и добавьте в начало поля назначения для MI. Повторяйте, пока не появится строка из нескольких символов. Это конец FirstName. Поздравляю, вы закончили разделять все это.

Другой вопрос: можете ли вы вернуться в AD и реэкспортировать и получить отдельные поля, а не отображаемое имя? (powershell, Get-ADUser ...) Намного проще было бы собрать отображаемое имя, чем сделать то, что я только что перечислил.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .