2017-02-23 185 views
0

我想要一种更简单的方法,使用PowerShell中的白名单从字符串中过滤掉不需要的字符。在这种情况下,我只想要字母数字和空格。这是我迄今(和它的作品),但似乎必须有一个小动作,不需要额外的变量:在PowerShell中从字符串中过滤不需要的字符

$tmp = '' 
[regex]::Matches($str, '[\w ]+') | ForEach-Object { $tmp += $_.Groups[0].Value } 
$str = $tmp 
+2

'-join [regex] ::匹配($ str,'[\ w] +')'或'$ str -replace'[^ \ w] +''。 – PetSerAl

+2

上面的正则表达式包含'_',所以你知道 – 4c74356b41

+0

谢谢@PetSerAl, – user17510

回答

1

通过删除不想要的字符字符串中反转character class并使用-replace操作者:

$str = $str -replace '[^\w ]+' 

注意\w包括下划线字符(_)。如果您想要删除它,则需要将正则表达式更改为[^a-z0-9 ]。由于默认情况下PowerShell不区分大小写,因此除非要使用区分大小写的替换运算符(-creplace),否则不需要明确包含大写字母。在这种情况下,将正则表达式更改为[^a-zA-Z0-9 ]

+2

如果你想删除'_'但不保留英文字母,那么你可以使用'[^ ​​ - [\ w - [_]]] +'正则表达式。 – PetSerAl