我有一个长长的文本文档,包含24,000多行。 当单词单独出现在一行上时,我需要搜索83个不同的单词并删除这83个单词的所有实例(请参见下面的示例)。单词将被删除。但是搜索必须忽略:
§
符号开头的行(无论该行的其余部分是否使用大写或小写字母)。示例
§History of TIME
HISTORY OF TIME
of
Future
Past
Of
Many Of
Official
Officer
North of the town
I am one of them
如果我搜索Of
,则在上面仅高亮显示第三和第六行。
第一行不会突出显示,因为它以§
开头。
由于第二行大写,因此第二行不会突出显示。
Many of
,North of the town
和I am one of them
不会突出显示,因为它本身不是Of
。
在Sublime中这可能吗?我认为搜索所有83个单独的单词会使查询过于复杂。但是,如果我可以一次搜索一个单词(确保它跳过Caps中的所有行以及以§
开头的所有行,那么就可以了)。
如果在Sublime中无法做到这一点,我还有其他方法可以使用吗?
答案 0 :(得分:0)
您说,当某行不是以of
开头或不是ALLCAPS,并且不是§
,many of
的一部分时,您想删除所有出现的north of
,one of
等短语。
使用
查找:(^(?:(?:§.*|[^[:alpha:]\n\r]*[[:upper:]]+(?:[^[:alpha:]\n\r]+[[:upper:]]+)*[^[:alpha:]\n\r]*))$|(?i:\b(?:many|north|one)\s+of\b))|(?i:\bof\b)
替换:$1
请参见regex demo
详细信息
(^(?:(?:§.*|[^[:alpha:]\n\r]*[[:upper:]]+(?:[^[:alpha:]\n\r]+[[:upper:]]+)*[^[:alpha:]\n\r]*))$|(?i:\b(?:many|north|one)\s+of\b))
-捕获组1(替换模式中使用$1
占位符表示):
^
-一行的开头(?:
-一个组:
§.*
|
-或[^[:alpha:]\n\r]*[[:upper:]]+(?:[^[:alpha:]\n\r]+[[:upper:]]+)*[^[:alpha:]\n\r]*
-除LF / CR符号和字母之外的0+个字符,然后是1+个大写字母,然后是0+个非换行符和非字母字符的序列,后跟1+个大写字母并以0结尾+非换行符和非字母字符的序列)$
-结束|
或
(?i:\b(?:many|north|one)\s+of\b)
-匹配many
,north
或one
的不区分大小写的组,后跟1+个空格,然后将of
作为整个单词|
-或(?i:\bof\b)
-不区分大小写的组:of
作为一个整体。请参见SublimeText3测试,请选择正则表达式模式和区分大小写的匹配项: