用一个空格替换空白区域

时间:2017-03-31 16:04:35

标签: regex powershell

我从JavaScript中的this示例开始,并尝试进行相同的性能测试。

我有

$string = 'RAM Statistics:     5954 /     8174       743=InUse      746=Peak'
$RegEx1 = '/ +/g'
$RegEx2 = '/  +/g'
$RegEx3 = '/ {2,}/g'
$RegEx4 = '/\s\s+/g'
$RegEx5 = '/ +(?= )/g'


Measure-Command {
    $newString = $string -replace $RegEx1, $null
}
Write-Host "$newString"
Measure-Command {
    $newString = $string -replace $RegEx2, $null
}
Write-Host "$newString"
Measure-Command {
    $newString = $string -replace $RegEx3, $null
}
Write-Host "$newString"
Measure-Command {
    $newString = $string -replace $RegEx4, $null
}
Write-Host "$newString"
Measure-Command {
    $newString = $string -replace $RegEx5, $null
}
Write-Host "$newString"

而且我的时间变得非常不同了,但都没有回归,这并不是很有用。我在哪里错误地将Javascript RegEx转换为PowerShell正则表达式? FWIW,我想保持简单,所以只有空格,不需要也替换CR等。数据非常简单,格式化只是垃圾。

1 个答案:

答案 0 :(得分:1)

在PowerShell中(通常我认为.Net)你的修饰符/选项应该位于像(?smi)/ +这样的构造中字符串的开头。

  

用一个空格替换空格

$newString = $string -replace "\s+", " "

如果你想要简单,那应该做得很好。

使用你的正则表达式字符串来考虑这个例子,以显示你想要匹配的内容。

"this is only a /    /g" -replace '/ +/g', "test"
this is only a test

一对字面正斜线,至少有一个空格将它们分开,然后是文字g。