用GREP替换:搜索单词,忽略某些行

时间:2019-09-20 12:46:53

标签: regex grep sublimetext3

我有一个长长的文本文档,包含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 ofNorth of the townI am one of them不会突出显示,因为它本身不是Of

在Sublime中这可能吗?我认为搜索所有83个单独的单词会使查询过于复杂。但是,如果我可以一次搜索一个单词(确保它跳过Caps中的所有行以及以§开头的所有行,那么就可以了)。

如果在Sublime中无法做到这一点,我还有其他方法可以使用吗?

1 个答案:

答案 0 :(得分:0)

您说,当某行不是以of开头或不是ALLCAPS,并且不是§many of的一部分时,您想删除所有出现的north ofone 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)-匹配manynorthone的不区分大小写的组,后跟1+个空格,然后将of作为整个单词
  • |-或
  • (?i:\bof\b)-不区分大小写的组:of作为一个整体。

请参见SublimeText3测试,请选择正则表达式模式区分大小写的匹配项:

enter image description here