Regex 不包括字符的正则表达式不起作用

Regex 不包括字符的正则表达式不起作用,regex,powershell,powershell-2.0,regex-negation,Regex,Powershell,Powershell 2.0,Regex Negation,我有一个简单的正则表达式,可以将所有匹配项从文本文件返回到文件: \\Root_Dir.*?' 这仍然包括像\Root\u dir\nextdir\happy.rep这样的文件 如果可能的话,我还想在返回的内容中排除结尾的单引号 我使用的是PowerShell 2.0,我相信它支持lookaronds。您应该使用负lookback。也就是说,如果出现.rep \\Root_dir[^']*(?<!\.rep)(?=') \\Root\u dir[^']*(? 然而,我很想将其分解为: 以

我有一个简单的正则表达式,可以将所有匹配项从文本文件返回到文件:

\\Root_Dir.*?' 这仍然包括像
\Root\u dir\nextdir\happy.rep
这样的文件

如果可能的话,我还想在返回的内容中排除结尾的单引号


我使用的是PowerShell 2.0,我相信它支持lookaronds。

您应该使用负lookback。也就是说,如果出现
.rep

\\Root_dir[^']*(?<!\.rep)(?=')
\\Root\u dir[^']*(?
然而,我很想将其分解为:

  • 以前缀开头:
    $value.StartsWith(“\\Root\u Dir”)

  • 如果#1为真,则使用一个带有负数loook的正则表达式:
    (?返回一个混乱,因为有多个。如果我将其更改为\\Root\u dir.*(?@user1921849,请查看编辑..我使用了
    [^']
    不是
    *
    。您说过文件总是以
    结尾。
    有效。谢谢。有没有办法不让匹配中返回结尾处的单引号?@user1921849使用
    (?=)
    而不是
    \\Root\u Dir(?!*?\.rep.*?”返回nothing@user1921849另一个(已接受)答案比单一的正则表达式有更好的方法(没有更多的输入数据难以测试)。我可能会坚持两部分的方法,因为我认为它更清楚:复杂的正则表达式通常是一个维护问题。
    \\Root_dir[^']*(?<!\.rep)(?=')
    
    \\Root_Dir.*?(?!\.rep)' \\Root_Dir(?!.*?\.rep).*?'