【问题标题】:Multiple word search and replace in notepad++notepad++中的多词搜索和替换
【发布时间】:2012-07-08 12:31:24
【问题描述】:

有谁知道如何在notepad++中同时替换几个不同的单词。

例如;

我有“好”、“好”和“好”,我想同时用“坏”、“差”和“不”替换它们

我知道我可以一一替换,但是我面临的问题需要我替换很多单词,这样做不方便。

【问题讨论】:

    标签: notepad++


    【解决方案1】:

    尝试用(?1bad)(?2worse)(?3not) 替换(good)|(great)|(fine) 的正则表达式。

    搜索会查找由| 分隔的三个备选方案之一。每个备选方案都有自己的捕获括号。替换使用条件形式?Ntrue-expression:false-expression,其中N 是十进制数字,该子句检查捕获表达式N 是否匹配。

    在 Notepad++ 6.3 中测试

    更新:

    你可以找到很好的文档,关于新的PRCE Regular N++ 使用的表达式,从 6.0 版本开始,在两个地址 下面:

    http://www.boost.org/doc/libs/1_48_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html

    http://www.boost.org/doc/libs/1_48_0/libs/regex/doc/html/boost_regex/format/boost_format_syntax.html

    第一个是关于 SEARCH 中正则表达式的语法

    第二个是关于正则表达式的语法 替换

    而且,如果你能理解“书面法语”,我制作了一个关于 PCRE正则表达式,存放在Christian的个人网站 居维叶 (cchris),地址如下:

    http://oedoc.free.fr/Regex/TutorielRegex.zip

    (摘自 THEVENOT Guyhttp://sourceforge.net/p/notepad-plus/discussion/331754/thread/ca059a0a/ 的帖子)

    【讨论】:

    • 太棒了!可以加源码吗?我在文档中的任何地方都找不到这个。我经常使用 notepad++ 的正则表达式替换,我很好奇是否可以得到更多很酷的东西
    • 这真的很有帮助。谢谢:)
    • 在 6.4.5 中我的索引从 0 开始
    • awesome 从来不知道这一点,使用 notepad++ 进行正则表达式替换不断。
    • 这太棒了!但是,你知道如何让它使用上一个搜索/替换的输出来进行下一个搜索吗?我认为这就是它正在做的因为 |,但事实并非如此。
    【解决方案2】:

    从插件管理器安装Python Script 插件。

    用你的替换创建一个文件(例如,C:/Temp/Substitutions.txt),用空格分隔值:

    good bad
    great worse
    fine not
    

    创建一个新脚本:

    with open('C:/Temp/Substitutions.txt') as f:
        for l in f:
            s = l.split()
            editor.replace(s[0], s[1])
    

    针对要替换的文本运行新脚本。

    【讨论】:

    • 适用于简单的搜索和替换。如果要替换的东西是正则表达式本身,则不起作用。
    • @Rishi 对于这个问题,简单的搜索替换就足够了。 正则表达式搜索替换可以通过使用editor.rereplace(s[0], s[1])来实现。或者更好的 editor.pyreplace 来利用完整的 Python 正则表达式支持。
    • 酷!现在我懂了。谢谢:)
    • 如何在 NotePadd++ 中跨多个文件运行这个 Python 脚本?
    【解决方案3】:

    如果您一直在替换多个不同文件中的相同单词,则使用 these buttons 记录一次您的操作并将其保存为宏会很有帮助。 *记事本++

    【讨论】:

      【解决方案4】:

      我需要对几个文件运行替换。

      所以,根据Mauricio Morales 的回答,我创建了以下脚本。

      with open('C:/Temp/Substitutions.txt') as f:
          files = notepad.getFiles()
          for file in files:
              notepad.activateFile(file[0]) 
              for l in f:
                  s = l.split()
                  editor.replace(s[0], s[1])
              f.seek(0) # reset file input stream
      

      【讨论】:

        【解决方案5】:

        我四处寻找可以同时替换多个术语的软件,Notepad ++ 有字符限制(替换字段中限制为 2046 个字符),所以我决定用 HTML 制作自己的替换版本,here是网站:

        https://jsfiddle.net/Byte/y50q1e7g/

        window.onload = function(){
        	$("textarea,input[type='text']").focus(function() { $(this).select(); } );
        }
        
        
        function replace(){
        	
        	// Get Configuration
        	let separatedBy = new RegExp( $("#separatedBy").val() );
        	let useRegex = $("#useRegex").prop("checked");
        	let isCaseSensitive = $("#caseSensitive").prop("checked") ? "" : "i";
        	
        	// Get 'Find' and 'Replace'
        	let find = $('#find').val().split(separatedBy);
        	let replace = $('#replace').val().split(separatedBy);
        	
        	// Make result equal origin
        	$("#result").val($("#original").val());
        	
        	// Run in each 'find' item
        	for(i=0; i<find.length; i++){
        		// check if not use Regex to escape the regex
        		find[i] = useRegex ? find[i] : find[i].replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
        		
        		// Replace
        		$("#result").val($("#result").val().replace(new RegExp(find[i],"g"+isCaseSensitive), replace[i]));
        	}
        	
        }
        *{
        	font-family: Sans-Serif;
        	box-sizing: border-box;
        }
        
        body{
        	padding:1em 10%;
        }
        
        textarea,input[type='text']{
        	font-family: monospace;
        }
        
        textarea{
        	border-radius: 5px;
        	width: 100%;
        	padding:1em;
        }
        
        .config{
        	width: 100%;
        	border-radius: 5px;
        	border: 1px solid #888888;
        	padding: 1em;
        	display: inline-block;
        	color: #888888;
        }
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        <p>
        	Original text:<br />
        	<textarea id="original" rows="4" cols="50"></textarea>
        </p>
        
        <p>
        	Items to find:<br />
        <textarea id="find" rows="4" cols="50">item1
        item2
        item3</textarea>
        </p>
        
        <p>
        	Items to replace:<br />
        <textarea id="replace" rows="4" cols="50">replace1
        replace2
        replace3</textarea>
        </p>
        
        <p class="config">
        	<b>Configuration:</b><br><br />
        	- Items separated by <input id="separatedBy" type="text" value="\n" size="3" /> (Regex)<br />
        	- <input id="useRegex" type="checkbox"/> Use Regex in each item<br>
        	- <input id="caseSensitive" type="checkbox" checked/> Use case sensitive
        </p>
        
        <p>
        	<input type="button" value="Replace" onclick="replace()" />
        </p>
        
        <p>
        	Result:<br>
        	<textarea id="result"  rows="4" cols="50"></textarea>
        </p>

        【讨论】:

        • 谢谢!那真的很有帮助。适用于 16 个单词的列表。
        • “所以我决定制作我自己的替代版本”……那是我的偶像……编码精美、分享和闪耀。 ( :
        • 为什么要用 JavaScript 代码回答 Notepad++ 问题?这应该是另一个问题的答案。
        • Notepad++ 仅限于这样做,既不简单也不实用,而且我也没有在其他任何地方找到简单的方法来做到这一点,即使当时我在这里寻找这个答案。所以我对这个人的问题提出了一个简单的解决方案,也许还有很多其他问题,就是如何替换几个文本,你甚至不必看代码。
        猜你喜欢
        • 2020-07-29
        • 2013-10-18
        • 2023-03-24
        • 1970-01-01
        • 2011-07-01
        • 2014-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多