【问题标题】:Sublime & Regex: How to find all lines that are 3 letters or less, excluding certain lines?Sublime & Regex:如何查找所有不超过 3 个字母的行,不包括某些行?
【发布时间】:2021-02-17 01:55:00
【问题描述】:

我有一个 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 不受影响,因为它们都是大写字母。 以§ 开头的行也不受影响。


我的尝试

我知道这段代码可以用来让正则表达式忽略所有大写的行和所有以§开头的行(在示例中,代码正在搜索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}$'

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

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

【问题讨论】:

    标签: regex sublimetext3


    【解决方案1】:

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

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

    并使用空字符串替换:

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

    RegEx Demo

    正则表达式详细信息:

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

    之前:

    之后

    【讨论】:

      【解决方案2】:

      我建议使用

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

      请参阅regex demo。 详情:

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

      SublimeText3 测试:

              V

      【讨论】:

        猜你喜欢
        • 2010-11-27
        • 2014-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多