正则表达式排除字符不起作用

时间:2013-01-16 17:25:35

标签: regex powershell powershell-v2.0 regex-negation

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

\\Root_Dir.*?'

他们以“\Root_dir”开头,以单引号结束。它工作正常,但问题是我想要排除扩展名为.rep的文件。根据我的阅读,我试过:

\\Root_Dir.*?(?!\.rep)'

这仍包含\Root_dir\nextdir\happy.rep等文件。

我还想在可能的情况下排除结尾的单引号

我正在使用PowerShell 2.0,我认为它支持lookaronds。

2 个答案:

答案 0 :(得分:1)

你应该使用负面的背后隐藏 ..即你需要为.rep

的任何出现看单引号
\\Root_dir[^']*(?<!\.rep)(?=')

答案 1 :(得分:0)

\\Root_Dir.*?(?!\.rep)'

考虑后面的部分(在.*?之后)要求的内容,在字符串中的相同位置

  • 匹配单引号
  • 所以不匹配\.rep

显然在示例中这是正确的,因为.*?匹配.rep,因此前方的负面展望得到满足。

由于.NET支持可变宽度环视 1 ,因此在为报价单独执行之前,需要在前瞻中执行可变宽度部分:

\\Root_Dir(?!.*?\.rep).*?'

然而,我很想将其分解为:

  1. 以前缀$value.StartsWith("\\Root_Dir")
  2. 开头
  3. 如果#1为真,那么使用带有负loook的正则表达式:(?<!\.rep)'$(即引号前面没有......)。

  4. 1 没有人告诉PM / dev其他人认为这太难了。