正则表达式帮助在特定条件下替换目录

时间:2015-03-04 00:14:45

标签: regex powershell

我需要编写一个正则表达式来更新一些注册表文件,以便为即将到来的迁移工作

我必须动态更新文件中的所有字符串:

  1. 有一个以C:
  2. 开头的目录路径
  3. 目录没有" xyz "或" abc "在路径
  4. 如果文件中的字符串包含文件[EX * .ext],则唯一更新的是目录路径,文件名&扩展所以那些是孤立的
  5. 不会替换,而是在字符串中保留任何附加信息[EX:" " "或")"]用于关闭文件中的字符串参数
  6. 我得到它做1和2,但不是3和4.我使用PowerShell 4.0,递归检查目录中的文件并生成一个新文件,其中包含每个子目录中找到的每个文件的更改。 / p>

    转换应如下所示:

    FROM: setting1="\"C:\\\\this\\\\is\\\\\adirectory\"" 
    
    TO: setting1="\"O:\\\\\New_Directory_Path\""
    


    FROM: othersetting="\"C:\\\\this\\\\abc\\\\directory"" 
    

    TO:UNCHANGED


    FROM: thisfile="\"(C:\\\\this\\\\directory\\\\somefile.some_ext)""
    
    TO: thisfile="\"(O:\\\\New_Directory_Path\\\\somefile.some_ext)""
    


    我在这个问题上的智慧结束了,到目前为止,这就是正则表达式:

    gc $file | % {$_ -replace "C:(?!.*abc.*)(?!.*xyz.*)(?!.*\..*).*","O:\\\\New_Directory_Path\"} | out-file "$filePath\$newFileName"
    

    希望有人在这里伸出援助之手。此外,这是我第一次在这里发帖,抱歉没有把我的代码放在标签中。

1 个答案:

答案 0 :(得分:1)

尝试这种模式
编辑:

C:(?!.*(abc|xyz)).*?(?=[^\\]+\.[^\\]+|$)  

Demo