31

我已经尝试了一些东西,但由于某种原因它们似乎不起作用。

基本上我试图做的是让用户使用“Read-host”cmdlet 输入一个值,然后去掉它的任何空格。

我试过了:

$answer = read-host
$answer.replace(' ' , '""')

和:

$answer = read-host
$answer -replace (' ')

我可能遗漏了一些非常明显的东西,但是如果有人可以帮助我或向我展示一种更简单的方法来实现这一点,我将不胜感激。

我打算将变量传递给命令并以这种方式剥离它,但我见过的示例都没有工作,尽管它们看起来更容易。

4

5 回答 5

62

运算符的Replace意思是用其他东西替换某些东西;不要与删除功能混淆。

此外,您应该将操作员处理的结果发送到变量或另一个操作员。既不.Replace(),也不-replace修改原始变量。

要删除所有空格,请使用“用空字符串替换任何空格符号

$string = $string -replace '\s',''

要删除行首和行尾的所有空格,并将所有双倍和更多空格或制表符符号替换为空格键符号,请使用

$string = $string -replace '(^\s+|\s+$)','' -replace '\s+',' '

或更本机的System.String方法

$string = $string.Trim()

首选正则表达式,因为' '仅表示“空格键”符号,而'\s'表示“空格键、制表符和其他空格符号”。请注意,$string.Replace()“Normal”是否替换,$string -replaceRegEx 是否替换,后者更重但更实用。

请注意,RegEx 有一些特殊符号,如点 ( .)、大括号 ( []())、斜线 ( \)、帽子 ( ^)、数学符号 ( +-) 或美元符号 ( $),需要进行转义。( 'my.space.com' -replace '\.','-'=> 'my-space-com'. 带数字的美元符号 (ex $1) 必须小心用在正确的部分

'2033' -replace '(\d+)',$( 'Data: $1')
Data: 2033

更新:您还可以使用$str = $str.Trim(),TrimEnd()TrimStart(). 在System.String MSDN 页面上阅读更多信息。

于 2014-06-22T22:19:54.323 回答
9

你很近。您可以使用以下replace方法去除空格:

$answer.replace(' ','')

replace 方法中的第二组引号之间不需要有空格或字符(用空替换空格)。

于 2014-06-22T21:16:03.190 回答
6

您还拥有System.String类的TrimTrimEndTrimStart方法。trim 方法将从字符串的前导部分和尾随部分去除空格(带有几个 Unicode 怪癖),同时允许您选择指定要删除的字符。

#Note there are spaces at the beginning and end
Write-Host " ! This is a test string !%^ "
 ! This is a test string !%^
#Strips standard whitespace
Write-Host " ! This is a test string !%^ ".Trim()
! This is a test string !%^
#Strips the characters I specified
Write-Host " ! This is a test string !%^ ".Trim('!',' ')
This is a test string !%^
#Now removing ^ as well
Write-Host " ! This is a test string !%^ ".Trim('!',' ','^')
This is a test string !%
Write-Host " ! This is a test string !%^ ".Trim('!',' ','^','%')
This is a test string
#Powershell even casts strings to character arrays for you
Write-Host " ! This is a test string !%^ ".Trim('! ^%')
This is a test string

TrimStart 和 TrimEnd 的工作方式相同,只是修剪字符串的开头或结尾。

于 2014-06-23T03:29:17.603 回答
3

您可以使用:

$answer.replace(' ' , '')

或者

$answer -replace " ", ""

如果要删除所有空格,可以使用:

$answer -replace "\s", ""
于 2014-06-22T21:16:48.517 回答
0

如果字符串是

$STR = 'HELLO WORLD'

并且您想删除 'HELLO' 和 'WORLD' 之间的空白

$STR.replace(' ','')

replace获取字符串并用空字符串(长度为 0)替换空白,换句话说,空白只是被删除。

于 2018-06-06T01:24:02.000 回答