如何解决删除多行有条件重复的字符串
使用 EmEditor,我想删除占据整行及其上方一行的字符串的所有重复实例。例如,在此文本中,重复的字符串是 Cyperus esculentus(可以是其他任何内容),我希望删除所有重复的实例,包括上一行,即语言代码.到目前为止,我想出的是这样的:
.{2,3} \nCyperus esculentus\n
但问题是我必须用在每个不同文本中重复的字符串替换重复的字符串。
ar
سعد لذيذ
ast
Cyperus esculentus
azb
یئمهلی توپالاق
az
Yeməli topalaq
bo
ཆུ་འབྲུམ།
ca
Xufa
ceb
Cyperus esculentus
cs
Šáchor jedlý
de
Erdmandel
en
Cyperus esculentus
eo
Cyperus esculentus
es
Cyperus esculentus
eu
Bedaur
fa
اویار سلام زرد
fr
Souchet comestible
gl
Xunca doce
ha
Aya
he
גומא נאכל
id
Cyperus esculentus
it
Cyperus esculentus
ja
ショクヨウガヤツリ
la
Cyperus esculentus
nl
Knolcyperus
nv
Tłʼohigaaí
pl
Cibora jadalna
pt
Cyperus esculentus
ru
Чуфа
srn
Affo
sv
Jordmandel
th
แห้วไทย
tr
Yer bademi
uk
Смикавець їстівний
uz
Yerbodom
vi
Củ gấu tàu
war
Cyperus esculentus
zh
油莎草
预期的结果是应用我上面提到的正则表达式后剩下的(澄清一下,在这些文本中只有一个字符串可以重复,因此正则表达式不必寻找多个不同的重复字符串):
ar
سعد لذيذ
azb
یئمهلی توپالاق
az
Yeməli topalaq
bo
ཆུ་འབྲུམ།
ca
Xufa
cs
Šáchor jedlý
de
Erdmandel
eu
Bedaur
fa
اویار سلام زرد
fr
Souchet comestible
gl
Xunca doce
ha
Aya
he
גומא נאכל
ja
ショクヨウガヤツリ
nl
Knolcyperus
nv
Tłʼohigaaí
pl
Cibora jadalna
ru
Чуфа
srn
Affo
sv
Jordmandel
th
แห้วไทย
tr
Yer bademi
uk
Смикавець їстівний
uz
Yerbodom
vi
Củ gấu tàu
zh
油莎草
这对我有用
document.selection.StartOfDocument(false);
document.DeleteDuplicates("",eeIncludeAll);
document.selection.Replace("([a-z]{2,3} \\n)([a-z]{2,3} \\n)","\\2",eeFindReplaceCase | eeReplaceAll | eeFindReplaceRegExp,0);
document.selection.Replace("([a-z]{2,0);
解决方法
-
在过滤器工具栏中,从匹配行上方的附加可见行数中选择
1
,输入Cyperus esculentus
,然后按 Enter 键。 -
确保同一工具栏中的阻止多项更改按钮清晰(未设置)。
-
在编辑菜单上选择全选和删除(或按Ctrl + A,Delete 当键盘焦点在编辑器中时)。
如果您想使用宏,这里是适合您的宏:
fs = document.filters;
fs.Clear();
fs.AddFind( "Cyperus esculentus",eeFindReplaceCase,0 );
fs.VisibleLinesAbove = 1;
fs.VisibleLinesBelow = 0;
document.filters = fs;
document.selection.SelectAll();
document.selection.Delete();
fs.Clear();
document.filters = fs;
您可以在打开数据文件后运行此宏。为此,请将此代码保存为例如 Filter.jsee
,然后从 宏 菜单中的 选择... 中选择此文件。最后,打开您的数据文件,并在数据文件处于活动状态时在宏菜单中选择运行。确保在运行宏之前清除阻止多项更改按钮。
参考文献:EmEditor Macro Reference: Filters Collection
更新
我知道“Cyperus esculentus”可以是任何其他短语。假设重复项总是出现在偶数行号,这里是您可以使用的宏。此宏选择所有偶数,为所选行中的重复项添加书签,并删除所有已添加书签的行(上面+一行)。确保在运行宏之前清除阻止多项更改按钮。
editor.ExecuteCommandByID(4323); // clear all bookmarks
document.selection.StartOfDocument(false);
editor.ExecuteCommandByID(4208); // No Wrap
nLines = document.GetLines();
document.selection.LineDown(false,1);
for( i = 0; i < nLines; i += 2 ) {
editor.ExecuteCommandByID(4153); // select character
document.selection.CharRight(false,1);
editor.ExecuteCommandByID(4153);
document.selection.StartOfLine(false,eeLineView | eeLineHomeText);
document.selection.LineDown(false,2);
}
document.DeleteDuplicates("",eeSortSelectionOnly | eeBookmark | eeIncludeAll); // bookmark all duplicates in selected lines
document.selection.Collapse();
// filter bookmarked lines only
fs = document.filters;
fs.Clear();
fs.AddFind( "",eeExFindBookmarkedOnly );
fs.VisibleLinesAbove = 1;
fs.VisibleLinesBelow = 0;
document.filters = fs;
document.selection.SelectAll();
document.selection.Delete(1); // delete all filtered lines
fs.Clear();
document.filters = fs;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。