2014-06-11 3 views
0

Мне нужно заменить (удалить) несколько возможностей текста в строке, и я пытаюсь сделать все это в одной строке (вместо того, чтобы иметь кучу, если это сделать материал). Например, у меня есть несколько пользователей с названиями заданий, все на разных уровнях (Manager 1, Manager 2 и т. Д.). Некоторые из них заканчиваются цифрами, но некоторые из них заканчиваются II, III, IV и т. Д. (Римские цифры). Я использую следующее, чтобы удалить числа (да, в массиве):Использование регулярных выражений в PowerShell для удаления текста из строки

$_.CSVJobTitle = ((Get-Culture).TextInfo.ToTitleCase($objCSV."Job Title".ToLower())) -Replace " \d+$" 

И это отлично работает. Он удаляет номера из всех названий заданий. Потому что я тоже делаю титул, когда в названии должности III, я в конечном итоге с Iii (используя правильный случай). Но, когда я пытаюсь добавить больше к вышесказанному:

$_.CSVJobTitle = ((Get-Culture).TextInfo.ToTitleCase($objCSV."Job Title".ToLower())) -Replace " \d+$","ii$","iii$","iv$" 

Я получаю следующее сообщение об ошибке:

The -ireplace operator only permits 2 elements on the right-hand side, not 4 

Так я исследовал, как сделать эту работу, и я продолжаю читать о регулярных выражениях это ответ, и я уверен, что это простой ответ, но я не могу понять, как заставить регулярное выражение работать в этой ситуации. Я читал и много пробовал по регулярным выражениям и просто не могу получить его и нуждаюсь в помощи. Есть ли способ использовать указанную выше команду и удалить (заменить ничем) элементы, которые я пытаюсь удалить? Или есть жесткий предел, и мне нужно выяснить что-то еще?

+0

@AlanMoore - Я не понимаю, некоторые из ваших правок. Они идентичны моим. Некоторые из них теперь отформатированы как код (и я вижу изменение для символов верхнего регистра) - спасибо, но другие не изменились. О, хорошо, оцените отзывы. – STGdb

ответ

3

Как насчет использования класса символов?

$_.CSVJobTitle = ((Get-Culture).TextInfo.ToTitleCase($objCSV."Job Title".ToLower())) -Replace '\s[0-9ivx]+$' 

Или, с некоторым чередованием придачи:

-Replace '\s(?:\d+|[ivx]+)$' 
+0

Мне кажется, что выбор выглядит лучше для меня здесь: '... -replace '(\ d + | iii? | Iv) $''. –

+0

Может быть, немного, если и то, и другое? (обновлено) – mjolinor

+0

@mjolinor - Отлично работает (используя версию «некоторые изменения»), спасибо. (@AnsgarWiechers). Я попробовал, но, используя «лучший выбор», похоже, попытался обновить все элементы в массиве (я предполагаю, что PS считает, что он соответствует всем элементам в массиве?). – STGdb

Смежные вопросы