在PowerShell中使用正则表达式从字符串中删除文本

时间:2014-06-11 20:42:46

标签: .net regex powershell

我需要在字符串中替换(删除)文本的多种可能性,并且我试图在一行中完成所有操作(而不是如果这样做那么一堆)。例如,我有许多具有职位的用户,所有用户都处于不同级别(Manager 1Manager 2等)。其中一些以数字结尾,但其中一些以IIIIIIV等结尾(罗马数字)。我使用以下内容删除了数字(是的,在数组中):

$_.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

所以我一直在研究如何完成这项工作,我一直在阅读正则表达式作为答案,我确信这是一个简单的答案,但我似乎无法理解如何在这种情况下使正则表达式工作。我已经阅读并尝试了很多关于正则表达式而且无法获得它并需要帮助。有没有办法使用上面的命令并删除(替换为空)我试图删除的项目?或者是否存在硬限制,我需要弄清楚其他什么?

1 个答案:

答案 0 :(得分:3)

如何使用角色类?

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

或者,抛出一些变化:

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