在Powershell中替换转义字符

时间:2009-02-13 23:15:33

标签: regex powershell

我有一个由

组成的字符串
"some text \\computername.example.com\admin$".

我如何进行替换,以便我的最终结果只是“computername”

我的问题似乎不知道如何逃避两个反斜杠。为了简单起见,我宁愿不使用正则表达式:)

编辑:实际上看起来像stackoverflow也有双反斜杠的问题,它应该是一个双反斜杠,而不是单个显示

2 个答案:

答案 0 :(得分:5)

在这种情况下,我认为你不会放弃正则表达式。

我会使用这种模式:

'Some text \\computername\admin$' -replace '\\\\(\w+)\\(\w+)\$', '$1'

给你

PS C:\> 'Some text \\computername\admin$' -replace '\\\\(\w+)\\(\w+)\$', '$1'

Some text computername

或者如果您只想要来自该行的计算机名称:

'Some text \\computername\admin$' -replace '.*\\\\(\w+)\\(\w+)\$', '$1'

返回

PS C:\> 'Some text \\computername\admin$' -replace '.*\\\\(\w+)\\(\w+)\$', '$1'

computername

答案 1 :(得分:4)

首先,所呈现的Regex方法绝对没有问题。但是,如果你对它不感兴趣,请检查:

$test = "some text \\computername.example.com\admin$"
$test.Split('\')[2].Split('.')[0]

非常简单的测试表明,我的机器上的分割速度略快于它的价值:

12:35:24 |(19)|C:\ PS>Measure-Command {1..10000 | %{'some text \\computername.example.com\admin$'.Split('\')[2].Split('.')[0]}}


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 1
Milliseconds      : 215
Ticks             : 12159984
TotalDays         : 1.40740555555556E-05
TotalHours        : 0.000337777333333333
TotalMinutes      : 0.02026664
TotalSeconds      : 1.2159984
TotalMilliseconds : 1215.9984



12:35:34 |(20)|C:\ PS>Measure-Command {1..10000 | %{'Some text \\computername\admin$' -replace '\\\\(\w+)\\(\w+)\$', '$1'}}


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 2
Milliseconds      : 335
Ticks             : 23351277
TotalDays         : 2.70269409722222E-05
TotalHours        : 0.000648646583333333
TotalMinutes      : 0.038918795
TotalSeconds      : 2.3351277
TotalMilliseconds : 2335.1277