如何在字符串中删除多个字符

4

我一直在尝试找到最好的方法来串联一个删除命令,但我不明白如何在一个字符串中执行这个操作,而不是使用多个字符串... 我想要删除所有空格和下划线;我知道我可以像这样逐个删除它们:

$Name = "\Test Name\Test_Underscore 1_2"
$NameFull1 = $NAME -replace '\s'
$NameFull2 = $NameFull1 -replace '_',''

并且需要输出如下结果:
TestNameTestUnderscore12

然而,我只想做一次,但是我不确定如何将它们组合在一起(我已经寻找了一段时间,但找不到答案)。

我认为它应该像这样看起来(我也尝试过其他几种方法),但总是遇到错误...

$Name = "\Test Name\Test_Underscore 1_2"
$NameFull = $NAME -replace '\s' | '_',''

也许 $NameFull1 = $NAME -replace '[\s_]'?它的结果是 \TestName\TestUnderscore12。你想要替换 \ 吗? - Wiktor Stribiżew
是的,我想要替换字符串中的所有反斜杠。 - Shane Johnson
请检查我的答案,我展示了使用正则表达式最有效的方法。 - Wiktor Stribiżew
2个回答

2
我建议将您需要删除的字符放入字符类中:
使用“字符类”,也称为“字符集”,可以告诉正则表达式引擎仅匹配多个字符中的一个。只需将要匹配的字符放置在方括号之间即可。如果要匹配ae,请使用[ae]。您可以在gr[ae]y中使用此方法来匹配graygrey
代码:
PS> $Name = "\Test Name\Test_Underscore 1_2"
PS> $NameFull1 = $NAME -replace '[\s_\\]+'
PS> $NameFull1
TestNameTestUnderscore12
[\s_\\] 可以匹配空格、下划线和反斜杠。

1
这就是我一直在寻找的。我不知道如何将它们联系起来,但字符类对此非常完美!谢谢! - Shane Johnson

0

管道符号 (|) 必须在字符串内部用于替代:

$NameFull = $NAME -replace '\s|_', ''

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接