Regex 正则表达式忽略第五次出现'\';反斜杠

Regex 正则表达式忽略第五次出现'\';反斜杠,regex,windows,powershell,Regex,Windows,Powershell,我一直在尝试编写一个正则表达式,它忽略第五次出现反斜杠后的所有文本,例如在文本下面;所讨论的语言是powershell \\Fileserver\Usershare$\Svr2008\Profiles\john.contoso.V2 我做了多次尝试,但都没有成功,我所能做的就是使用([^\$]*$)匹配发布usershare$后的所有内容,这给了我\\Fileserver\usershare$ 我希望输出为\\Fileserver\Usershare$\svr2008 任何帮助都将不胜感激 根据

我一直在尝试编写一个正则表达式,它忽略第五次出现反斜杠后的所有文本,例如在文本下面;所讨论的语言是powershell
\\Fileserver\Usershare$\Svr2008\Profiles\john.contoso.V2
我做了多次尝试,但都没有成功,我所能做的就是使用
([^\$]*$)
匹配发布usershare$后的所有内容,这给了我
\\Fileserver\usershare$

我希望输出为
\\Fileserver\Usershare$\svr2008

任何帮助都将不胜感激

根据Mik的建议,我尝试了
^\\\\([^\\]*\\){3}
,并将其用作

$Parent= \\Fileserver\Usershare$\Svr2008\Profiles\john.contoso.V2
$test = $parent -replace '^\\\\([^\\]*\\){3}'
$test
我得到下面的答案

Svr2008\Profiles\john.contoso.V2
但是我需要不匹配的部分,我做错了什么吗?

试试这个(假设有5个以上的反斜杠)

相配
\\Fileserver\Usershare$\Svr2008\
中的
\\Fileserver\Usershare$\Svr2008\Profiles\john.contoso.V2


在执行
\\\Fileserver\Usershare$\Svr2008\Profiles\john.contoso.V2'-matches'^\\\([^\\]*\\){3}'
之后,您所需的字符串将位于
$matches[0]

以下是完成此任务的另一种方法。[咧嘴笑]

它的作用

  • 将路径放在$Var中
  • \
    字符上拆分
  • 获取前五个结果项
  • \
代码

$Test = '\\Fileserver\Usershare$\Svr2008\Profiles\john.contoso.V2'
$Test.Split('\')[0..4] -join '\'

output=
\\Fileserver\Usershare$\Svr2008

正则表达式不“输出”任何内容。这是一个模式匹配工具。您可以使用它来用某种模式替换匹配的子字符串。这就是您想要的:用空字符串替换第五个反斜杠之后的任何内容?是的,我正在使用powershell post Match中的replace函数这里有一个非正则表达式解决方案:。根据您的脚本,最好首先使用Get ChildItem-Path x-Depth 4来获取您需要的项目,例如,您是否真的只需要路径-删除文件名?@Lee_Dailey:不,我实际上需要带有文件名的路径以及删除文件的父目录,这很有魅力!但是,当我替换它时,它会删除我需要的部分,因此$test=$parent-replace'^\\\([^\]*\){3}将输出为Profiles\john.contoso.V2。我编辑了一些其他信息,您所需的字符串将以$matches[0]形式出现
$Test = '\\Fileserver\Usershare$\Svr2008\Profiles\john.contoso.V2'
$Test.Split('\')[0..4] -join '\'