带有 GREP 的 SUBLIME:搜索单词,忽略某些行
SUBLIME with GREP: Search for words, ignoring certain lines
我有一个超过 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 个单独的词会使查询过于复杂。但是,如果我一次可以搜索一个词(确保它跳过大写字母中的所有行以及以 §
开头的所有行,那么就没问题了)。
如果这在 Sublime 中不可行,我可以使用其他方法吗?
你说当某行不是以 §
开头或全大写且不属于 many of
、[=13 时,你想删除所有出现的 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)
替换:</code></p>
<p>见<a href="https://regex101.com/r/a1lOZf/3" rel="nofollow noreferrer">regex demo</a></p>
<p><strong>详情</strong></p>
<ul>
<li><code>(^(?:(?:§.*|[^[:alpha:]\n\r]*[[:upper:]]+(?:[^[:alpha:]\n\r]+[[:upper:]]+)*[^[:alpha:]\n\r]*))$|(?i:\b(?:many|north|one)\s+of\b))
- 捕获组 1(使用替换模式中的 </code> 占位符引用):
<ul>
<li><code>^
- 行首
(?:
- 一组:
§.*
|
- 或
[^[: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测试,介意select正则模式和区分大小写匹配:
我有一个超过 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 个单独的词会使查询过于复杂。但是,如果我一次可以搜索一个词(确保它跳过大写字母中的所有行以及以 §
开头的所有行,那么就没问题了)。
如果这在 Sublime 中不可行,我可以使用其他方法吗?
你说当某行不是以 §
开头或全大写且不属于 many of
、[=13 时,你想删除所有出现的 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)
替换:</code></p>
<p>见<a href="https://regex101.com/r/a1lOZf/3" rel="nofollow noreferrer">regex demo</a></p>
<p><strong>详情</strong></p>
<ul>
<li><code>(^(?:(?:§.*|[^[:alpha:]\n\r]*[[:upper:]]+(?:[^[:alpha:]\n\r]+[[:upper:]]+)*[^[:alpha:]\n\r]*))$|(?i:\b(?:many|north|one)\s+of\b))
- 捕获组 1(使用替换模式中的 </code> 占位符引用):
<ul>
<li><code>^
- 行首
(?:
- 一组:
§.*
|
- 或[^[: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测试,介意select正则模式和区分大小写匹配: