我想要一种更简单的方法,使用PowerShell中的白名单从字符串中过滤掉不需要的字符。在这种情况下,我只想要字母数字和空格。这是我迄今(和它的作品),但似乎必须有一个小动作,不需要额外的变量:在PowerShell中从字符串中过滤不需要的字符
$tmp = ''
[regex]::Matches($str, '[\w ]+') | ForEach-Object { $tmp += $_.Groups[0].Value }
$str = $tmp
我想要一种更简单的方法,使用PowerShell中的白名单从字符串中过滤掉不需要的字符。在这种情况下,我只想要字母数字和空格。这是我迄今(和它的作品),但似乎必须有一个小动作,不需要额外的变量:在PowerShell中从字符串中过滤不需要的字符
$tmp = ''
[regex]::Matches($str, '[\w ]+') | ForEach-Object { $tmp += $_.Groups[0].Value }
$str = $tmp
通过删除不想要的字符字符串中反转character class并使用-replace
操作者:
$str = $str -replace '[^\w ]+'
注意\w
包括下划线字符(_
)。如果您想要删除它,则需要将正则表达式更改为[^a-z0-9 ]
。由于默认情况下PowerShell不区分大小写,因此除非要使用区分大小写的替换运算符(-creplace
),否则不需要明确包含大写字母。在这种情况下,将正则表达式更改为[^a-zA-Z0-9 ]
。
如果你想删除'_'但不保留英文字母,那么你可以使用'[^ - [\ w - [_]]] +'正则表达式。 – PetSerAl
'-join [regex] ::匹配($ str,'[\ w] +')'或'$ str -replace'[^ \ w] +''。 – PetSerAl
上面的正则表达式包含'_',所以你知道 – 4c74356b41
谢谢@PetSerAl, – user17510