我目前有25,000多个服务器名称的列表。每个名称都有大量的其他名称,我想删除这些名称。这是一个示例数据:
WindowsAuthServer @{htew804WIN}
我想从每个服务器中删除“ WindowsAutherServer @ {”和“ WIN}”,只剩下“ htew804”。我目前有:
$remove1 = $file -remove "WindowsAutherServer @{",""
$final = $remove1 -remove "WIN}",""
这可行,但是如果可能的话,我想一步来做。能做到吗?
答案 0 :(得分:2)
此RegEx
可以一次完成:
$str = "WindowsAuthServer @{htew804WIN}"
$str -replace '.*?{(.*?)WIN}','$1'
答案 1 :(得分:1)
考虑要保留什么。
"WindowsAuthServer @{htew804WIN}" | foreach { $x = $_ -match '\@\{(.+)WIN}' ; $Matches[1] }
答案 2 :(得分:0)
可以使用String.Substring()
和String.LastIndexOf()
方法轻松完成此操作:
$str = "WindowsAuthServer @{htew804WIN}"
$str.Substring(($open = $str.LastIndexOf('{') + 1), $str.LastIndexOf('}') - $open - 3)
我们首先使用String.LastIndexOf('{')
查找最后一次出现的{
,然后(使用该距离作为偏移量)计算长度,直到WIN}
之前
答案 3 :(得分:0)
或者这个:
$str = "WindowsAuthServer @{htew804WIN}"
([regex]'@\{(\w+)WIN\}').Match($str).Groups[1].Value;