【发布时间】:2012-07-08 12:31:24
【问题描述】:
有谁知道如何在notepad++中同时替换几个不同的单词。
例如;
我有“好”、“好”和“好”,我想同时用“坏”、“差”和“不”替换它们
我知道我可以一一替换,但是我面临的问题需要我替换很多单词,这样做不方便。
【问题讨论】:
标签: notepad++
有谁知道如何在notepad++中同时替换几个不同的单词。
例如;
我有“好”、“好”和“好”,我想同时用“坏”、“差”和“不”替换它们
我知道我可以一一替换,但是我面临的问题需要我替换很多单词,这样做不方便。
【问题讨论】:
标签: notepad++
尝试用(?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),地址如下:
(摘自 THEVENOT Guy 在http://sourceforge.net/p/notepad-plus/discussion/331754/thread/ca059a0a/ 的帖子)
【讨论】:
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])
【讨论】:
editor.rereplace(s[0], s[1])来实现。或者更好的 editor.pyreplace 来利用完整的 Python 正则表达式支持。
如果您一直在替换多个不同文件中的相同单词,则使用 these buttons 记录一次您的操作并将其保存为宏会很有帮助。 *记事本++
【讨论】:
我需要对几个文件运行替换。
所以,根据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
【讨论】:
我四处寻找可以同时替换多个术语的软件,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>
【讨论】: