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。
正则表达式详细信息:
^
: 开始
(?!(?:§|[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
我有一个 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。
正则表达式详细信息:
^
: 开始(?!(?:§|[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