【问题标题】:Removing spaces from a variable input using PowerShell 4.0使用 PowerShell 4.0 从变量输入中删除空格
【发布时间】:2014-08-12 21:26:24
【问题描述】:

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

基本上我想要做的是让用户使用 "Read-host" cmdlet,然后去掉任何空格。

我试过了:

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

还有:

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

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

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

【问题讨论】:

  • $str = $str.replace(' ','')

标签: string powershell variables spaces stripping


【解决方案1】:

如果字符串是

$STR = 'HELLO WORLD'

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

$STR.replace(' ','')

replace 获取字符串并将空格替换为空字符串(长度为 0),换句话说,空格被删除了。

【讨论】:

    【解决方案2】:

    Replace 操作符的意思是用别的东西替换某些东西;不要与删除功能混淆。

    您还应该将运算符处理的结果发送到变量或另一个运算符。 .Replace()-replace 都不会修改原始变量。

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

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

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

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

    或者更原生的System.String方法

    $string = $string.Trim()
    

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

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

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

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

    【讨论】:

    • 答案可能会让学生/学习者感到困惑,因为您指的是除空格之外的其他替换。
    【解决方案3】:

    您还拥有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 的工作方式相同,只是修剪字符串的开头或结尾。

    【讨论】:

      【解决方案4】:

      你可以使用:

      $answer.replace(' ' , '')
      

      $answer -replace " ", ""
      

      如果您想删除所有可以使用的空格:

      $answer -replace "\s", ""
      

      【讨论】:

      • \s 和 ' ' 之间的区别是什么(第一个和第三个示例)?
      • @Timo - ' ' 是一个包含单个空格的字符串,因此只会匹配该字符。 "\s" 是匹配任何空格的正则表达式,因此第三个示例删除所有空格而不仅仅是空格。
      • 感谢 Lee,所以 \s 删除所有空格比 ' ' 更省钱,因为您可以轻松键入 2 个空格,而您的意图只是一个。
      【解决方案5】:

      你已经接近了。您可以使用 replace 方法去除空格,如下所示:

      $answer.replace(' ','')

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-10-23
        • 1970-01-01
        • 2022-12-16
        • 1970-01-01
        • 1970-01-01
        • 2013-06-24
        • 1970-01-01
        相关资源
        最近更新 更多