Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Notepad++ 替换目录路径而不更改所有路径_Notepad++ - Fatal编程技术网

Notepad++ 替换目录路径而不更改所有路径

Notepad++ 替换目录路径而不更改所有路径,notepad++,Notepad++,我不太清楚这个词怎么说,但我认为这些例子会让它更容易理解。我有一个txt文件,路径指向文件。有些路径比我需要更改为新目录的其他文件更深一个目录。它们都在同一根路径中,因此基本的查找和替换会将新路径添加到每个条目中,我不希望: 常见路径: \maindirectory\dir1\file1.txt \maindirectory\dir2\file2.txt 需要更改的路径: \maindirectory\file.exe \maindirectory\file900.doc 致: 有没有办法

我不太清楚这个词怎么说,但我认为这些例子会让它更容易理解。我有一个txt文件,路径指向文件。有些路径比我需要更改为新目录的其他文件更深一个目录。它们都在同一根路径中,因此基本的查找和替换会将新路径添加到每个条目中,我不希望:

常见路径:

\maindirectory\dir1\file1.txt
\maindirectory\dir2\file2.txt
需要更改的路径:

\maindirectory\file.exe
\maindirectory\file900.doc 
致:

有没有办法找到并替换“\maindirectory”或文件之外的目录,然后将行更改为“\maindirectory\newdir”,而不添加“\maindirectory\newdir\dir1”或逐行更改?

您可以用于此操作

  • 打开“查找并替换”对话框,选择“正则表达式”作为搜索模式

  • 在“查找内容”字段中输入以下模式:

  • 在“替换为”字段中输入以下内容:

    \1newdir\\\2
    
  • 单击“全部替换”

  • 看到它的作用:

    图案说明:

    • (\\maindirectory\\)
      逐字匹配“\maindirectory”并将其捕获到组1中
    • ([^\\]+)
      匹配除“”以外的一个或多个字符,并在组2中捕获它们
    然后替换基本上是:

    第1组捕获的内容+
    “newdir\”
    +第2组捕获的内容


    经过一些修补和测试,我能够想出以下解决方案:

    首先,查找并替换为Normal表达式:

    Find: \maindirectory\
    Replace: \maindirectory\newdir\
    
    然后使用正则表达式查找并替换:

    Find: \\maindirectory\\(\b.+?)\\(\b.+?)\\
    Replace: \\maindirectory\\$2\\
    

    这样做的目的是将\maindirectory\newdir\添加到每一行,然后使用正则表达式行删除第二个目录(\$2\)如果存在3,则将旧路径合并回原来的状态。我希望这对将来的人有所帮助。

    这也有效。谢谢!请注意,
    \b
    不应在此处使用。在这种情况下,可能会导致一些误判(例如,如果您的目录以非字母数字字符开头,如“@something”)。此外,无需执行两个查找和替换操作。如我的回答所示,只需使用一个即可实现。事实上,在我的情况下不是这样,因为
    (\\maindirectory\\)([^\\]+)$
    一次捕获多行。我认为这取决于每个列表的格式。您可以将
    [^\\\]+
    部分替换为
    [^\\\\\\\ r\n]+
    或使用
    +?
    (正如您在回答中所做的;只是没有
    \b
    )。
    Find: \maindirectory\
    Replace: \maindirectory\newdir\
    
    Find: \\maindirectory\\(\b.+?)\\(\b.+?)\\
    Replace: \\maindirectory\\$2\\