我有一个由
组成的字符串"some text \\computername.example.com\admin$".
我如何进行替换,以便我的最终结果只是“computername”
我的问题似乎不知道如何逃避两个反斜杠。为了简单起见,我宁愿不使用正则表达式:)
编辑:实际上看起来像stackoverflow也有双反斜杠的问题,它应该是一个双反斜杠,而不是单个显示答案 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