我想要一种更简单的方法,使用PowerShell中的白名单从字符串中过滤掉不需要的字符。在这种情况下,我只想要字母数字和空格。这是我到目前为止(它的工作原理),但似乎必须有一个小技巧,不需要额外的变量:
$tmp = ''
[regex]::Matches($str, '[\w ]+') | ForEach-Object { $tmp += $_.Groups[0].Value }
$str = $tmp
答案 0 :(得分:1)
通过反转character class并使用-replace
运算符,删除字符串中您不想要的字符:
$str = $str -replace '[^\w ]+'
请注意,\w
包含下划线字符(_
)。如果您希望删除它,则需要将正则表达式更改为[^a-z0-9 ]
。由于PowerShell默认情况下不区分大小写,因此除非您要使用区分大小写的替换运算符(-creplace
),否则不需要显式包含大写字母。在这种情况下,将正则表达式更改为[^a-zA-Z0-9 ]
。