Sublime & Regex:如何找到不超过 3 个字母的所有行,不包括某些行?

Sublime & Regex: How to find all lines that are 3 letters or less, excluding certain lines?

我有一个 10,000 行长的文档。 我想删除所有不超过 3 个字母的行,排除以 § 符号开头的任何行或排除所有大写的行。

示例: 移除前:

§day
DOG
Happy
Monday
Now
Yes
Sunday
§new day.txt
DIY
Leg
Books
Car
Home

删除后:

§day
DOG
Happy
Monday
Sunday
§new day.txt
DIY
Books
Home

DOG & DIY 不受影响,因为它们都是大写字母。 以 § 开头的行也不受影响。


我的尝试

我知道这段代码可以用来让 Regex 忽略所有大写的行和所有以 § 开头的行(在这个例子中,代码正在搜索 many or north or one ).

(^(?:(?:§.*|[^[:alpha:]\n\r]*[[:upper:]]+(?:[^[:alpha:]\n\r]+[[:upper:]]+)*[^[:alpha:]\n\r]*))$|(?i:\b(?:many|north|one)\s+of\b))|(?i:\bof\b)

我也知道 this code 可以用来查找所有不超过 3 个字母的单词

'^.{1,3}$'

有什么方法可以将它们组合起来吗?

我尝试用 '^.{1,3}$' 替换 many|north|one 但没有成功。

您可以使用此正则表达式进行搜索:

^(?!(?:§|[A-Z]+$)).{0,3}(?:[\r\n]+|\z)

并使用空字符串替换:

确保在您的正则表达式中启用模式 m 或 MULTILINE。

RegEx Demo

正则表达式详细信息:

  • ^: 开始
  • (?!(?:§|[A-Z]+$)):如果行以 § 开头或仅包含大写字母
  • ,则否定前瞻断言失败
  • .{0,3}(?:[\r\n]+|\z): 匹配任何字符 0 到 3 次后跟 1 个或多个换行符或文件结尾

之前:

之后

我建议使用

(?-i)^(?!§|[A-Z]+$).{1,3}$\R?

regex demo详情:

  • (?-i) - 打开区分大小写(或者,您可以省略它并打开 Aa 选项,如下面的屏幕截图所示)
  • ^ - 行首
  • (?!§|[A-Z]+$) - 开头没有 § 并且一行只允许由大写 ASCII 字母组成
  • .{1,3} - 1 到 3 个字符
  • $ - 行尾
  • \R? - 一个可选的换行序列。

SublimeText3 测试:

V