【问题标题】:regex to ignore all text after the fifth occurrence of a '\' backslash正则表达式在第五次出现“\”反斜杠后忽略所有文本
【发布时间】:2019-12-02 20:13:28
【问题描述】:

我一直在尝试编写一个正则表达式,它忽略第五次出现反斜杠后的所有文本,例如文本下方;有问题的语言是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

但是我需要不匹配的部分,我做错了吗?

【问题讨论】:

  • 正则表达式不会“输出”任何东西。它是一个模式匹配工具。您可以使用它用某种模式替换匹配的子字符串。这就是你想要的:用空字符串替换第五个反斜杠之后的任何内容?
  • 是的,我在powershell post match中使用了replace功能
  • 这里有一个非正则表达式解决方案:stackoverflow.com/questions/55029472/…。根据您的脚本,最好只使用例如获取您需要的项目。 Get-ChildItem -Path x -Depth 4
  • 您真的只想要路径 - 删除了文件名吗?
  • @Lee_Dailey:不,我实际上需要文件名的路径以及文件的父目录已删除

标签: regex windows powershell


【解决方案1】:

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

^\\\\([^\\]*\\){3}

匹配 \\Fileserver\Usershare$\Svr2008\ in \\Fileserver\Usershare$\Svr2008\Profiles\john.contoso.V2

完成'\\Fileserver\Usershare$\Svr2008\Profiles\john.contoso.V2' -matches '^\\\\([^\\]*\\){3}'后,你想要的字符串将在$matches[0]中

【讨论】:

  • 像魅力一样工作!但是当我替换它时会删除我需要的部分,所以 $test = $parent -replace '^\\\([^\]*\){3}' 将输出作为 Profiles\john.contoso.V2.
  • 我编辑了更多信息,您想要的字符串将在 $matches[0]
【解决方案2】:

这是完成工作的另一种方法。 [咧嘴一笑]

它的作用......

  • 将路径放在 $Var 中
  • 在\ 字符上拆分
  • 获取第一个五个结果项
  • 加入他们\

代码...

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

输出 = \\Fileserver\Usershare$\Svr2008

【讨论】:

    猜你喜欢
    • 2020-10-23
    • 1970-01-01
    • 2010-11-01
    • 2016-01-21
    • 2022-07-05
    • 2014-11-12
    • 2012-06-01
    • 2015-06-20
    相关资源
    最近更新 更多