web-dev-qa-db-ja.com

PowerShell 4.0を使用して変数入力からスペースを削除する

私はすでにいくつかのことを試しましたが、何らかの理由で動作しないようです。

基本的に、私がやろうとしているのは、ユーザーに「Read-Host」コマンドレットを使用して値を入力させてから、スペースを取り除きます。

私は試した:

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

そして:

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

私はおそらく本当に明白なものを見逃していますが、誰かが私を助けたり、これを達成するためのより簡単な方法を教えてくれたら感謝しています。

変数をコマンドにパイプライン処理し、その方法で削除しましたが、見た例はどれもうまくいきませんでしたが、はるかに簡単に見えます。

22
cloudnyn3

Replace演算子はを意味します何かを何か他のものに置き換えます;削除機能と混同しないでください。

また、演算子によって処理された結果を変数または別の演算子に送信する必要があります。 .Replace()も_-replace_も元の変数を変更しません。

すべてのスペースを削除するには、「スペース記号を空の文字列に置き換えてください

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

行の先頭と末尾のすべてのスペースを削除し、すべての2つ以上のスペースまたはタブシンボルをスペースバーシンボルに置き換えるには、次を使用します。

_$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'_。数字付きドル記号(ex _$1_)は、正しい部分で注意して使用する必要があります

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

更新:$str = $str.Trim()TrimEnd()とともにTrimStart()を使用することもできます。詳細は System.String MSDNページをご覧ください。

44
filimonic

あなたは近いです。次のようなreplaceメソッドを使用して、空白を削除できます。

$answer.replace(' ','')

Replaceメソッドの2番目の引用符の間にスペースや文字を含める必要はありません(空白を何も置き換えません)。

7
Kohlbrr

System.String クラスの TrimTrimEnd および TrimStart メソッドもあります。 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
StephenP

次を使用できます。

$answer.replace(' ' , '')

または

$answer -replace " ", ""

すべての空白を削除する場合は、次を使用できます。

$answer -replace "\s", ""
1
Lee

文字列が

$STR = 'HELLO WORLD'

「HELLO」と「WORLD」の間の空のスペースを削除したい

$STR.replace(' ','')

replaceは文字列を取り、空白を空の文字列(長さ0)に置き換えます。つまり、空白は削除されます。

0
Abs