Regex 不包括字符的正则表达式不起作用
我有一个简单的正则表达式,可以将所有匹配项从文本文件返回到文件: \\Root_Dir.*?' 这仍然包括像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\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).*?'