32

有谁知道如何在记事本++中一次替换几个不同的单词。

例如;

我有“好”、“好”和“好”,我想一次用“坏”、“差”和“不”来替换它们

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

4

5 回答 5

62

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

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

在记事本++ 6.3 中测试

更新:

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

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

第一个涉及搜索中正则表达式的语法

第二个是关于 REPLACEMENT 中正则表达式的语法

而且,如果你能理解“书面法语”,我做了一个关于PCRE正则表达式的教程,存储在Christian Cuvier(cchris)的个人站点中,地址如下:

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

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

于 2013-04-19T12:45:56.933 回答
26

从插件管理器安装Python 脚本插件。

使用您的替换创建一个文件(例如,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])

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

于 2013-04-24T16:18:03.820 回答
6

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

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>

于 2018-03-28T22:04:48.723 回答
1

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

因此,根据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
于 2017-01-11T19:38:43.020 回答
0

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

于 2016-01-05T22:30:52.167 回答